插入 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
,因为这是内置类型。
我正在使用接受类型 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
,因为这是内置类型。