2017-07-15 78 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?如果是這樣,你可以檢查變量,以確認它是一個字符串,然後再嘗試插入它嗎?