psycopg3 中的 UTF-8
UTF-8 in psycopg3
我正在将使用 psycopg2 的 python 代码库重构为 psycopg3。
代码调用了 psycopg3 中不存在的 <cursor>.mogrify()
。
代码有类似这样的东西确保字符串是 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()
调用
我还需要做这样的事情来确保字符串在传递给 execute()
时是 UTF8 格式吗?
cur.execute("INSERT INTO data(name) values (%s)", name.encode("utf-8").decode())
在 psycopg2 和 psycopg3 中处理编码的正确方法是
- 在连接上或通过
SET client_encoding TO ...
设置编码
- 将
str
值传递给 cursor.execute
并让连接器处理编码(和解码)
所以使用 psycopg3 的正确代码是
cur.execute("INSERT INTO data(name) values (%s)", (name,))
请参阅 string adaptation 的文档。
问题中的 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)
我正在将使用 psycopg2 的 python 代码库重构为 psycopg3。
代码调用了 psycopg3 中不存在的 <cursor>.mogrify()
。
代码有类似这样的东西确保字符串是 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()
调用
我还需要做这样的事情来确保字符串在传递给 execute()
时是 UTF8 格式吗?
cur.execute("INSERT INTO data(name) values (%s)", name.encode("utf-8").decode())
在 psycopg2 和 psycopg3 中处理编码的正确方法是
- 在连接上或通过
SET client_encoding TO ...
设置编码
- 将
str
值传递给cursor.execute
并让连接器处理编码(和解码)
所以使用 psycopg3 的正确代码是
cur.execute("INSERT INTO data(name) values (%s)", (name,))
请参阅 string adaptation 的文档。
问题中的 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)