繁体   English   中英

使用python更新PostgreSQL中的json列时出错

[英]Error while updating json column in postgresql with python

当尝试使用psycopg2更新Postgres中json类型的列时,发生以下错误:psycopg2.ProgrammingError:无法适应类型'dict'

我正在运行此代码:

self.cursor.execute("UPDATE tb_games SET infos_json = %s WHERE id = 10", 
                    (json.dumps({'v1':'a','v2':'b'})))
conexao.commit()

我传递给json.dumps()的json是有效的,我已经对其进行了测试。 有人知道我可能做错了吗?

execute的第二个参数应该是一个序列,例如元组

self.cursor.execute("UPDATE tb_games SET infos_json = %s WHERE id = 10", 
                    (json.dumps({'v1':'a','v2':'b'}),) )

请注意, (json.dumps({'v1':'a','v2':'b'}),)中的逗号使表达式成为一个元组(包含一个元素)。 如果没有它,则括号中的整个表达式将作为字符串求值。

In [52]: type((json.dumps({'v1':'a','v2':'b'}),))
Out[52]: tuple

In [53]: type((json.dumps({'v1':'a','v2':'b'})))
Out[53]: str

为了确保commit时调用光标相关联的连接上self.cursor ,它可能是更好的调用

self.cursor.connection.commit()

代替

conexao.commit()

或者,将该连接用作上下文管理器

with conexao:
    with conexao.cursor() as cursor:
        cursor.execute("UPDATE tb_games SET infos_json = %s WHERE id = 10", 
                        (json.dumps({'v1':'a','v2':'b'}),) )

当Python的执行流程with -block离开外部with ,将提交事务,除非在发生错误的情况下使事务回滚。 这使得更容易一致地实施commit/rollback行为,而无需编写大量样板代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM