1
我试图在python项目dedupe中使用示例保存数据。尝试将数据插入数据库时,我所得到的错误是最后的结果。Postgres mogrify将二进制文件添加到SQL字符串
我得到的错误是:
Traceback (most recent call last):
File "dedupe_orgs.py", line 11, in <module>
main()
File "dedupe_orgs.py", line 7, in main
entity.dedupe_orgs()
File "/orgs.py", line 183, in dedupe_orgs
c2.execute("INSERT INTO entity_organization %s VALUES %s" % (values, args_str))
psycopg2.ProgrammingError: syntax error at or near "b"
LINE 1: ...d,id,name,created_on,updated_on,entity_id) VALUES b"(0,65,'S...
这是相关代码:
num_cols = len(column_names)
mog = "(" + ("%s," * (num_cols - 1)) + "%s)"
args_str = ','.join(c2.mogrify(mog, x) for x in full_data)
values = "(" + ','.join(x for x in column_names) + ")"
c2.execute("INSERT INTO entity_organization %s VALUES %s" % (values, args_str))
con2.commit()
con2.close()
con.close()
我相信这个问题是写在Python 2中的例子,但我使用Python 3.如何我可以解决错误,所以'b'不会添加到每个查询,防止数据保存?
这不能回答你的问题,但是,如果你打算在Python代码中与postgres数据库进行交互,我强烈建议sqlalchemy。它避免了这样的错误,因为你应该几乎永远不会写入原始的sql代码。 – melchoir55
@ melchoir55我实际上在其他方面使用sqlalchemy,但在将它转换为之前试图让这个例子工作。也许我应该现在就试试。 – Casey
好吧,我切换到sqlalchemy,现在一切都变得更好了。 – Casey