mysql in Python-Codierung
-
27-10-2019 - |
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.
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.