【问题标题】:Psycopg2 + Python 2 Unicode decode error with cursor.mogrifyPsycopg2 + Python 2 Unicode 解码错误与 cursor.mogrify
【发布时间】:2017-10-23 11:29:05
【问题描述】:

我有一个名为 test 的数据库,只有一列,即名称为 some_datacharacter varying 列。该数据库具有编码 UTF8 和排序规则 de_DE.utf8。 在注册 unicode 类型后建立与此数据库的连接,如下所示:

psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)

我建立连接

C_test = psycopg.connect(myhost [...])

并在连接上打开光标

cur_test = C_test.cursor()

我将我的数据作为 unicode 字符串插入到 test,所以当我这样做时:

cur_prod.execute("INSERT INTO test some_data VALUES ("+u'ö'+");")

该表应将 unicode u'ö' 保存为 'UTF8' 字符串 "\xc3\xb6"

当我选择插入的值时,UNICODE 扩展保证让我返回 unicode,事实上,当我选择并打印该值时,我得到 '\xf6''ö' 的 unicode。如果我在光标上使用 mogrify,例如:

cur_test.mogrify(u'%s',(u'ö',))

我得到一个类似"'\xc3\xb6'" 的字符串,由于 UnicodeDecode 错误,我无法插入该字符串。长话短说:我可以将 mogrify 与注册的 unicode 扩展一起使用,还是应该在没有 mogrify 的情况下进行字符串连接?

【问题讨论】:

    标签: python-2.7 unicode encoding utf-8 psycopg2


    【解决方案1】:

    是的,如果你注册了 unicode 适配器,mogrify 就会使用它。

    【讨论】:

    • 在我的情况下它没有。你知道为什么吗?
    猜你喜欢
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多