2017-07-15 75 views
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'不会添加到每个查询,防止数据保存?

+0

这不能回答你的问题,但是,如果你打算在Python代码中与postgres数据库进行交互,我强烈建议sqlalchemy。它避免了这样的错误,因为你应该几乎永远不会写入原始的sql代码。 – melchoir55

+0

@ melchoir55我实际上在其他方面使用sqlalchemy,但在将它转换为之前试图让这个例子工作。也许我应该现在就试试。 – Casey

+0

好吧,我切换到sqlalchemy,现在一切都变得更好了。 – Casey

回答

0

我猜args_str实际上不是字符串类型。您是否正在使用适当的调试器,如pycharm?如果是这样,你可以检查变量,以确认它是一个字符串,然后再尝试插入它吗?