\xc4\x8d
是的UTF-8 编码表示。Č
看起来插入已经起作用,但您没有正确打印结果,可能是通过将整行打印为列表。IE
>>> print "Č"
"Č"
>>> print ["Č"] # a list with one string
['\xc4\x8c']
我们需要查看更多代码来验证(提供尽可能多的可重现代码总是一个好主意)。
您可以对结果 ( result.decode("utf-8")
) 进行解码,但应避免手动编码或解码。Psycopg2 已经允许您发送 Unicode,因此您可以在不先编码的情况下执行以下操作:
cur.execute( u"UPDATE res_partner set %s = '%s' where id = %s;" % (columns, value, remote_partner_id))
- 注意前导u
Psycopg2 也可以通过自动解码字符串来返回 Unicode:
import psycopg2
import psycopg2.extensions
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
编辑:
SQL 值应作为参数传递给.execute()
. 请参阅大红框:http: //initd.org/psycopg/docs/usage.html#the-problem-with-the-query-parameters
取而代之的是
# Replace the columns field first.
# Strictly we should use http://initd.org/psycopg/docs/sql.html#module-psycopg2.sql
sql = u"UPDATE res_partner set {} = %s where id = %s;".format(columns)
cur.execute(sql, (value, remote_partner_id))