从psycopg2和python3插入数据库时​​,JSON数据为空,没有任何错误

时间:2018-12-25 07:34:13

标签: json python-3.x postgresql psycopg2

在将数据插入数据库表的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。

这是怎么了?请帮忙。

2 个答案:

答案 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。