我正在重构一个使用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时,确保字符串在execute()中
cur.execute("INSERT INTO data(name) values (%s)", name.encode("utf-8").decode())发布于 2021-12-30 11:18:44
在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://stackoverflow.com/questions/70529773
复制相似问题