我正在重構一個使用 psycopg2 到 psycopg3 的 python 代碼庫。
該代碼呼叫<cursor>.mogrify()了 psycopg3 中不存在的呼叫。
代碼有這樣的東西,確保字串是 UTF-8:
arg_str = cur.mogrify("(%s,%s,%s,%s,%s)", x)
args_list.append(arg_str)
args_str = b','.join(args_list).decode("utf-8")
cur.execute(insert_query args_str)
在新的代碼庫中,我添加client_encoding="UTF8"了psycopg.connect()呼叫
我是否仍然需要做這樣的事情以確保字串在傳遞給 UTF8 時將使用 UTF8 execute()?
cur.execute("INSERT INTO data(name) values (%s)", name.encode("utf-8").decode())
uj5u.com熱心網友回復:
在 psycopg2 和 psycopg3 中處理編碼的正確方法是
- 在連接上或通過設定編碼
SET client_encoding TO ... - 將
str值傳遞給cursor.execute并讓連接器處理編碼(和解碼)
所以使用 psycopg3 的正確代碼是
cur.execute("INSERT INTO data(name) values (%s)", (name,))
請參閱字串適應的檔案。
問題中的 psycopg2 代碼似乎不必要地復雜,像這樣的東西也能正常作業(假設 Python3):
x = ('a', 'b', 'c', 'd', 'e')
placeholders = ','.join(['%s'] * len(x))
insert_query = """INSERT INTO tbl (c1, c2, c3, c4, c5) VALUES ({})""".format(placeholders)
cur.execute(insert_query, args)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399527.html
標籤:Python PostgreSQL的 psycopg2 psycopg3
上一篇:如何更改條件運算式的默認列名
