1

我正在尝试为 postgREST 创建一个客户端(PostgreSQL 13 的最新版本)

当我尝试插入数据时,我感觉到(在我看来)一个奇怪的行为:当我使用 json.dumps 进行插入请求时,如果我的值错误,我得到一个 201 代码作为响应。

工作代码
该字段id是主键。

headers["Authorization"] = mytoken
myjson = {"id": "13", "name":"nameinserted"}
r = requests.post(url, json=myjson, headers=headers)

返回一个201代码如果我重试该代码,我会得到一个409(这是正常的)

不工作的代码:
这个总是给我一个201代码,并且永远不会在数据库中插入一些东西(即使有正确的数据)。不同的是json.dumps(myjson)我用错了。

headers["Authorization"] = mytoken
myjson = {"id": "13", "name":"nameinserted"}
myjson = json.dumps(myjson)
r = requests.post(url, json=myjson, headers=headers)

为什么我没有收到有关数据或格式错误的 json 的错误?

4

1 回答 1

0

在您给出的第一个示例中,发送到 PostgREST 的 JSON 编码有效负载是:

'{"id": "13", "name": "nameinserted"}'

在第二个示例中,再次编码后,发送的有效载荷为:

'"{\\"id\\": \\"13\\", \\"name\\": \\"nameinserted\\"}"'

PostgREST 将第一个有效负载解析为 JSON 值;另一方面,第二个有效载荷被解析为一个字符串值,相当于'"any_string"'例如。PostgREST 对这种类型的有效负载很宽容,不会给出错误,但将其默认为空 JSON 数组 '[]',即使数组由于批量插入而为空,也允许这样做,并以201.

于 2021-10-27T22:39:49.350 回答