python-2.7 - python通过psycopg2 unicode字符插入postgres

标签 python-2.7 unicode psycopg2 postgresql-9.3 pgdb

大家好,我在将 utf-8 unicode 字符插入数据库时​​遇到问题。

我从表单中获得的 unicode 是 u'AJDUK MARKO\u010d'。下一步是将其解码为 utf-8。 value.encode('utf-8') 然后我得到一个字符串 'AJDUK MARKO\xc4\x8d'。

当我尝试更新数据库时,插入顺便说一句,效果相同。

cur.execute( "UPDATE res_partner set %s = '%s' where id = %s;"%(columns, value, remote_partner_id))

该值被插入或更新到数据库,但问题是它的格式与 AJDUK MARKO\xc4\x8d 完全相同,当然我想要 AJDUK MARKOČ >。数据库有 utf-8 编码,所以不是这样的。

我做错了什么?令人惊讶的是在论坛上找不到任何有用的东西。

最佳答案

\xc4\x8dČ 的 UTF-8 编码表示。看起来插入已经起作用,但您没有正确打印结果,可能是将整行打印为列表。即

>>> 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))

关于python-2.7 - python通过psycopg2 unicode字符插入postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34601334/

相关文章:

python - 正则表达式从字符串中获取数字

python - 如何确定调用了哪个运算符实例?

css - 内容之前 CSS 的 Unicode 符号列表

python - 如何在 mac 上为 django 安装 psycopg2

python - 从 Python 创建动态 SQL 查询

python-2.7 - pycharm:如何将 pyspark 导入 pycharm

python - 设置 LSTM 建模的 Keras 选项

unicode - 处理网址中的 ą ę 等国家标志? - 你的选择

php - DOMDocument 对我的字符串做了什么?

Python 程序无法运行 - psycopg2 重命名警告