插入 JSON 个对象的数组

inserting array of JSON objects

我正在使用接受类型 JSON[] 参数的存储过程。 假设一个类似于 listJson = [{"value":"v1"}, {"value" : "v2"}] 的列表,我想调用 psycopg2 的以下方法:

cursor.execute("call my_stored_procedure(%XXX)",(listJson,))

但我不知道如何替换 %XXX 以使占位符与列表兼容。 我尝试 %s::json[]%s::jsonb[] 均未成功。如果无法使用上述方法,如果有人能指出我执行调用的其他策略,我将不胜感激。 提前致谢。

您没有任何 JSON 开始,您只有一个字典列表。这就是你想要在python中拥有的东西吗?

>>> listJson = [{"value":"v1"}, {"value" : "v2"}]
>>> type(listJson)
<type 'list'>
>>> type(listJson[0])
<type 'dict'>
>>> type(listJson[1])
<type 'dict'>

您可以制作一个字符串列表,每个字符串都包含有效的 JSON 语法,然后调用:

listJson = ['{"value":"v1"}', '{"value" : "v2"}']
cursor.execute("CALL my_stored(%s::json[])",(listJson,))
import psycopg2, json
...
list = [{"value":"v1"}, {"value" : "v2"}]
listJson = [json.dumps(x) for x in list]
cursor.execute("call my_stored_procedure(%s::json[])",(listJson,))

使用psycopg2.extras.Json怎么样:

cursor.execute("CALL my_stored(%s)",(Json(list),))

此外,尝试使用更好的变量名,例如 values 而不是 list,因为这是内置类型。