[英]Postgres/psycopg2 - Inserting array of strings
我正在使用Postgres 9和Python 2.7.2以及psycopg2,並嘗試使用正確轉義的引號插入字符串值數組。 樣品:
metadata = {"Name": "Guest", "Details": "['One', 'Two', 'Three']"}
cur.execute("insert into meta values ('%s');" % metadata)
拋出異常:
psycopg2.ProgrammingError: syntax error at or near "One"
LINE 1: "Details": "['One...
^
我也嘗試使用Postgres'E與反斜杠一起逃脫,但還沒有找到正確的組合。 想法?
你必須讓psycopg為你做參數綁定:不要試圖自己引用它們。
Psycopg自動將python字符串列表轉換為postgres數組。 查看http://initd.org/psycopg/docs/usage.html
def lst2pgarr(alist):
return '{' + ','.join(alist) + '}'
pyarray = ['pippo', 'minni', 1, 2]
conn = psycopg2.connection ( HERE PUT YOUR CONNECTION STRING )
c = conn.cursor()
c.execute('select ... where pgarray_attr = %r' % (lst2pgarr(pyarray))
c.execute('insert into tab(pgarray_attr) values (%r)' % (lst2pgarr(pyarray))
當你想通過SQL將數組插入postgreSQL數據庫時,你可以這樣做:
INSERT INTO tablename VALUES ('{value1,value2,value3}');
注意:你需要單引號括起花括號! 所以實際上你將一個特殊的“數組”語法的String / Varchar傳遞給DB
如果我將你的代碼輸入python解析器,我得到這樣的東西:
'{'Name': 'Guest', 'Details': "['One', 'Two', 'Three']"}'
但PostgreSQL期望這樣的事情:
'{"Name","Guest","Details",{"One","Two","Three"}}'
查看陣列手冊: http : //www.postgresql.org/docs/9.0/static/arrays.html
因此,要么通過編寫輔助函數來根據PostgreSQL“array-grammar”格式化String,要么使用為您執行此操作的庫。
如果要將整個元數據作為字符串轉儲到表中,則可以執行以下操作:
cur.execute("insert into meta values (%s);", (str(metadata),))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.