使用 Python 在 Postgres 中传递 JSON 文件
Passing JSON file in Postgres with Python
connection = psycopg2.connect("dbname=db1 user=postgres password=postgres")
cursor = connection.cursor()
cursor.execute("set search_path to public")
with open('json_template') as file:
data = file.read()
query_sql = """
insert into table1 select * from
json_populate_recordset(NULL::table1, %s);
"""
# change .execute(query_sql) to .execute(query_sql, (data,))
cursor.execute(query_sql, (data,))
connection.commit()
所以我试图将“json_template.json”的内容传递给 Postgres table,但是当我这样做时,我得到了这个错误:
psycopg2.errors.InvalidParameterValue: 无法在对象上调用 json_populate_recordset
我通过 psql 命令创建了 table。此外,这是我的 json_template 文件的内容:
{"key": "A123", "value": "15.6", "ts":"2020-10-07 13:28:43.399620+02:00"}
附上截图:json_template.json.
对该错误进行了一些研究,但没有发现任何结果。还尝试以其他方式 重写代码 几次 - 仍然是同样的错误。
提前致谢!
你有一个 JSON object
,所以你需要使用 json_populate_record
而不是 json_populate_recordset
,它适用于对象数组。
import psycopg2
con = psycopg2.connect(...)
cursor = con.cursor()
with open('json_template') as file:
data = file.read()
query_sql = """
insert into table1 select * from
json_populate_record(NULL::table1, %s);
"""
cursor.execute(query_sql, (data,))
con.commit()
cursor.execute('select * from table1')
print(cursor.fetchall())
输出:
[('A123', '15.6', '2020-10-07 13:28:43.399620+02:00')]
我刚刚 更改了 JSON 文件来自:
{"key": "A123", "value": "15.6", "ts":"2020-10-07 13:28:43.399620+02:00"}
收件人:
[
{
"key": "A128",
"value": "15.6",
"ts": "2020-10-07 13:28:43.399620+02:00"
}
]
它奏效了。谢谢大家的帮助!
connection = psycopg2.connect("dbname=db1 user=postgres password=postgres")
cursor = connection.cursor()
cursor.execute("set search_path to public")
with open('json_template') as file:
data = file.read()
query_sql = """
insert into table1 select * from
json_populate_recordset(NULL::table1, %s);
"""
# change .execute(query_sql) to .execute(query_sql, (data,))
cursor.execute(query_sql, (data,))
connection.commit()
所以我试图将“json_template.json”的内容传递给 Postgres table,但是当我这样做时,我得到了这个错误: psycopg2.errors.InvalidParameterValue: 无法在对象上调用 json_populate_recordset
我通过 psql 命令创建了 table。此外,这是我的 json_template 文件的内容:
{"key": "A123", "value": "15.6", "ts":"2020-10-07 13:28:43.399620+02:00"}
附上截图:json_template.json.
对该错误进行了一些研究,但没有发现任何结果。还尝试以其他方式 重写代码 几次 - 仍然是同样的错误。
提前致谢!
你有一个 JSON object
,所以你需要使用 json_populate_record
而不是 json_populate_recordset
,它适用于对象数组。
import psycopg2
con = psycopg2.connect(...)
cursor = con.cursor()
with open('json_template') as file:
data = file.read()
query_sql = """
insert into table1 select * from
json_populate_record(NULL::table1, %s);
"""
cursor.execute(query_sql, (data,))
con.commit()
cursor.execute('select * from table1')
print(cursor.fetchall())
输出:
[('A123', '15.6', '2020-10-07 13:28:43.399620+02:00')]
我刚刚 更改了 JSON 文件来自:
{"key": "A123", "value": "15.6", "ts":"2020-10-07 13:28:43.399620+02:00"}
收件人:
[
{
"key": "A128",
"value": "15.6",
"ts": "2020-10-07 13:28:43.399620+02:00"
}
]
它奏效了。谢谢大家的帮助!