Frage

Dieser Beitrag ist das gleiche mit meiner Frage in MySQL in Python: UnicodeEncodeError: 'ascii' dies ist nur zu klar Dinge.

Ich versuche, eine Zeichenfolge in einer MySQL-Datenbank zu speichern, aber ich erhalte eine Fehlermeldung:

Datei ".smart.py", Zeile 51, in (Zahl, Text, 'Smart', 'u')

UnicodeDecodeError: 'ascii' Codec kann nicht dekodieren Byte 0xC2 in Position 25: Ordnungszahl nicht in Reichweite (128)

und die Zeichenfolge wird gespeichert unter m [ 'Text']

Lala * = # &% @ <> _:;?! - ' "/ () ¥ ¡¿

Hier ist ein Ausschnitt, um den Code

risk = m['Text']
msg = risk.encode('utf8')
text = db.escape_string(msg)

sql = "INSERT INTO posts(nmbr, \
       msg, tel, sts) \
       VALUES ('%s', '%s', '%s', '%s')" % \
       (number, text, 'smart', 'u')

Wenn ich versuche, die SQL-Abfrage zu kommentieren und put Drucktext , es wäre Lala aus * = # &% @ <> _:;?! -‘ „/ () ¥ ¡¿

Der Fehler nur auftritt, wenn die SQL verarbeitet wird.

MySQL-Codierung wird auf utf8_unicode_ci gesetzt. (Oder sollte ich das ändern?)

Danke.

War es hilfreich?

Lösung

diese Parameter MySQLdb.connect(..., use_unicode=1,charset="utf8") hinzuzufügen.

erstellen einen Cursor

cur = db.cursor()

und führen Sie dann in etwa so:

risk = m['Text']
sql = """INSERT INTO posts(nmbr, msg, tel, sts) \
         VALUES (%s, %s, %s, %s)"""
values = (number, risk, 'smart', 'u')
cur.execute(sql,values)  #use comma to separate sql and values, this will ensure values are escaped/sanitized
cur.commit()

jetzt nicht Sie diese beiden Zeilen müssen:

msg = risk.encode('utf8')
text = db.escape_string(msg)

Andere Tipps

Es ist nicht klar, ob Ihr m['Text'] Wert vom Typ StringType oder UnicodeType ist. Meine Wette ist, dass es ein Byte-String (StringType). Wenn das wahr ist, dann Hinzufügen einer Zeile m['Text'] = m['Text'].decode('UTF-8') vor Ihrem Einsatz arbeiten kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top