簡體   English   中英

Postgres / psycopg2 - 插入字符串數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM