2017-02-16 1 views
1

Je dois créer un script python pour migrer des données de Microsoft SQL Server vers PostgreSQL. Le problème se produit avec des caractères non ascii. Dans Microsoft SQL Server J'ai une table nommée Table1 avec une colonne de type nvarchar qui stockent un caractèreMigration de ms sql vers postgres caractères nonascii erreur python

â 

J'utilise pyodbc pour récupérer le caractère. Ma chaîne de connexion est

"ms_sql":{ 
    "DRIVER":"{SQL Server Native Client 11.0}", 
    "SERVER":"(localdb)\\v11.0", 
    "DATABASE":"sheshant_database", 
    "Trusted_Connection":"yes", 
    "charset":"SQL_Latin1_General_CP1_CI_AS" 

La collation en ms sql est SQL_Latin1_General_CP1_CI_AS. Lorsque je récupère des données en Python, il donne

u'\xe2' 

Puis je me connecte à postgres via psycopg2 et ceci est mon paramètre de chaîne de connexion

"postgres":{ 
    "host":"127.0.0.1", 
    "user":"postgres", 
    "password":"regards", 
    "database":"cmots", 
    "port":"5432" 

Dans PostgreSQL, l'encodage du client et le serveur est « latin1 » et 'utf8' respectivement. J'ai utilisé la commande dans psycopg2

'insert into table1 values ('+ a +');' // here a is a unicode and a = u'\xe2' 

. Mais les données stockées dans PostgreSQL sont

Γ 

Où cela s'est-il mal passé?

+0

Si 'pyodbc.version' ne puis pas revenir '4.0.6' mettre à jour pyodbc à la dernière version. Il y a eu plusieurs changements récents qui pourraient affecter vos résultats. –

+0

En outre, essayez 'cursor.execute ('insérer dans les valeurs table1 (% s)', (a,))' –

Répondre

0

Vérifiez l'encodage Windows et le remplacer:

cursor.execute ('insert into table1 values (%s)', a.decode('latin'));