在将数据插入数据库表的ONE列时遇到问题。
我使用psycopg2和python3.6尝试将数据插入表中。用于插入的数据具有一些不同类型的参数:str,int,json等。
我的查询是:
UPDATE i_proc
SET ad_info = '{"codes": ["P12", "P14"], "score": 3, "score2": 0}',
result_code_id = 33,
status = 'wait'
WHERE id=122;
如果我通过图形数据库管理工具(dbeaver)进行操作,则一切正常:所有值正确插入列中。没有任何错误或其他东西。
但是,如果我从python做到这一点:
from psycopg2._json import Json
ad_info = Json(additional_info)
cursor = conn.cursor()
cursor.execute(
("UPDATE i_proc SET status = '{status}', result_code_id =33, \
ad_info = {ad_info} \
WHERE id = {id};"
).format(
status=status,
id=id,
ad_info=ad_info
))
cursor.close()
conn.commit()
然后所有值将插入到表中,除了ad_info!没有错误等。该行的状态为“等待”, id 为33,但 ad_info 为 为空 。
要从dbeaver运行,我使用了与运行python代码的日志相同的SQL查询。因此,它是相同的查询。
同样,我在项目的另一部分中使用bjson-data来编写另一部分代码,在那部分中,相同的代码可以正常工作,正确插入bjson-data。
这是怎么了?请帮忙。
答案 0 :(得分:1)
谢谢,ildus。
使用json.dumps(additional_info),无需使用psycopg2中的Json。在查询中也应为“ {ad_info}”。
有效
答案 1 :(得分:0)
我不知道additional_info
中的值是什么,但是
我认为ad_info = {ad_info}
是不正确的。它应该类似于ad_info = '{ad_info}'
,因为您将json作为字符串提供给db。