2016-08-17 122 views
2

當我使用Python讀取從SQL Server(pypyodbc)值,並將其插入到PostgreSQL的避免轉換爲ASCII(psycopg2)如何閱讀

在名稱字段中的值已經拿出那就是導致錯誤:

Montaño 

值存在於我的MSSQL數據庫就好(SQL_Latin1_General_CP1_CI_AS編碼),並且可以插入使用pgAdmin的和INSERT語句我的PostgreSQL數據庫就好(UTF8)。

使用python它是選擇的問題導致的值被轉換成:

Monta\xf1o 

(XF1是關於 '拉丁小字母n與波浪' ASCII)

...其在嘗試插入PostgreSQL時導致以下錯誤:

invalid byte sequence for encoding "UTF8": 0xf1 0x6f 0x20 0x20 

是否有任何方法可以避免轉換輸入字符串上的字符串導致上面的錯誤?

回答

1

在Python_2下你實際上想要執行從基本字符串到unicode類型的轉換。所以,如果你的代碼看起來像

sql = """\ 
SELECT NAME FROM dbo.latin1test WHERE ID=1 
""" 
mssql_crsr.execute(sql) 
row = mssql_crsr.fetchone() 
name = row[0] 

,那麼你可能想使用它作爲一個參數到PostgreSQL INSERT之前,即基本latin1字符串(從SQL Server檢索)轉換爲類型unicode,而不是

name = row[0] 

你會做

name = unicode(row[0], 'latin1') 
+0

太棒了!完美工作!打算將其寫入我的生產腳本,但現在解決了這個問題。謝謝!!! – DPSSpatial