2015-08-26 5 views
7

ich Pandas Datenrahmen habe ich über read_csv geladen, die ich auf eine Datenbank über to_sql drücken versuche, wenn ich versuche,Pandas to_sql Fehler Unicode dekodieren gibt

df.to_sql("assessmentinfo_pivot", util.ENGINE) 

ich wieder ein unicodeDecodeError:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 83-84: ordinal not in range(128) 

Es gibt keine Codierungsoption für to_sql utf-8 für die to_sql und der Motor angeben wurde mit Codierung erstellt auf utf-8

ENGINE = create_engine("mssql+pymssql://" + 
         config.get_local('CEDS_USERNAME') + ':' + 
         config.get_local('CEDS_PASSWORD') + '@' + 
         config.get_local('CEDS_SERVER') + '/' + 
         config.get_local('CEDS_DATABASE'), 
         encoding="utf-8") 

Irgendwelche Pandas Einblick in das Funktionieren dieser richtig? Die meisten meiner Suchanfragen führen mich zu Leuten, die einen ähnlichen Fehler für to_csv haben, der gerade durch das Hinzufügen von encoding = "utf-8" gelöst wird, aber das ist hier leider keine Option.

Ich habe versucht, die Datei nach unten Schnipsel aber es gibt immer noch Fehler, auch wenn nur die Header abgespeckte: http://pastebin.com/F362xGyP

+0

Können Sie ein reproduzierbares Beispiel liefern? (Einige Beispieldaten und der Code, der den Fehler reproduziert) – joris

+0

Der Fehler tritt nur mit den Headern auf, die ich oben in einen Pastebin gelegt habe. Die Spalten haben einige lange Namen aufgrund einiger Pivots, die an die Quelltabelle gesendet werden. – lathomas64

+0

Es gibt einige Sonderzeichen aus einigen spanischen Datenquellennamen, die hier enden, wenn versucht wird, eine Pivot-Tabelle zu erstellen. Ich würde gerne in der Lage sein, dies in der to_sql Aufruf im Gegensatz zu den Zeichen aus den Headern zu entziehen. – lathomas64

Antwort

7

ich die pymysql genau das gleiche Problem mit der Kombination erfahren und

aktualisieren pandas.to_sql , hier ist das, was für mich gearbeitet:

Anstatt das charset als Argument vorbei, versuchen sie es direkt an der Verbindungszeichenfolge Befestigung:

Das Problem scheint in pymysql zu passieren und die Ursache für den Fehler ist anscheinend, dass die Codierung, die Sie definieren, nicht ordnungsgemäß weitergeleitet und festgelegt wird, wenn die pymsql-Verbindung festgelegt ist.

Aus Gründen der Fehlersuche, harcoded ich

encoding = 'utf-8

in der pymysql _do_execute_many Funktion und dass es mir erklärt.

0

Ich habe das Problem gelöst, indem ich den Zeichensatz in der MySQL-Datenbank (UTF-8) ändere und dies zur pymysql-Verbindung hinzufüge: charset='utf8'.

Verwandte Themen