【问题标题】:PostgREST returns no error with wrong JSON values (Python request)PostgREST 不返回错误 JSON 值的错误(Python 请求)
【发布时间】:2021-10-26 08:59:16
【问题描述】:

我正在尝试为 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 的错误消息?

【问题讨论】:

    标签: python-requests postgrest


    【解决方案1】:

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

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

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

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

    PostgREST 将第一个有效负载解析为 JSON 值;另一方面,第二个有效载荷被解析为一个字符串值,例如相当于'"any_string"'。 PostgREST 对这种类型的有效负载很宽容,不会给出错误但defaults it to an empty JSON array'[]',即使由于bulk insertion 而数组为空也是允许的,并以201 响应。

    【讨论】:

    • 感谢您的回答。所以 PostgREST 也应该在批量插入中返回错误数据的 201 吗? (对不起,我不懂 Haskell)。
    • @Fanch Haskell 代码基本上说如果数据不是数组或对象,则将其视为空数组(在这种情况下,字符串被视为空数组)。关于批量插入,如果您发送的数据与答案中的第二个示例具有相同的格式,那么是的,它将返回 201。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2022-06-12
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多