我正在使用Python从SQL Server (pypyodbc)读取值并将它们插入PostgreSQL (psycopg2)
NAME字段中出现了导致错误的值:
Montaño
该值存在于我的MSSQL数据库只是很好(SQL_Latin1_General_CP1_CI_AS编码),并可以插入到我的PostgreSQL数据库只是很好(UTF8)使用PGAdmin和插入语句。
问题是使用python选择它会导致值被转换为:
Montaxf1o
(xf1是'拉丁小写字母n带波浪'的ASCII码)
…当试图插入到PostgreSQL中时,会抛出以下错误:
invalid byte sequence for encoding "UTF8": 0xf1 0x6f 0x20 0x20
是否有任何方法可以避免将输入字符串转换为导致上述错误的字符串?
在Python_2下,您实际上确实想要执行从基本字符串到unicode
类型的转换。如果你的代码看起来像
sql = """
SELECT NAME FROM dbo.latin1test WHERE ID=1
"""
mssql_crsr.execute(sql)
row = mssql_crsr.fetchone()
name = row[0]
那么你可能想转换基本的latin1
字符串(从SQL Server检索)到类型unicode
之前使用它作为一个参数到PostgreSQL INSERT,即,而不是
name = row[0]
你会做
name = unicode(row[0], 'latin1')