ubuntuusers.de

Python: Bei String " und ' escapen

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Swissren

Avatar von Swissren

Anmeldungsdatum:
3. September 2006

Beiträge: 182

Hallo zusammen

Ich will in Python einen String in eine MySQL-DB eintragen. Dazu muss ich ihn ja escapen, damit MySQL nicht während der Übertragung meint, der SQL-Befehl sei fertig.

Soviel ich weiss müssen nur " und ' escaped werden (als \" und \' ).

Nach langem Suchen habe ich leider noch keine Lösung gefunden. Bei Pythonwiki gibt es eine Methode, die die einfachen Anführungszeichen mit doppeltem Backslash escaped, bringt mir leider nichts.

Der andere Weg, der mir bekannt ist, geht mit var.replace():

var = "asf'sdf"
var.replace("'", "\'")

Ich bin mir jedoch nicht sicher, ob das auch wirklich funktioniert, denn in der Python Shell sehe ich den Effekt nicht.

Ihr habt sicher gemerkt, dass ich noch nicht allzu viel Erfahrung mit Python habe, daher bitte habt etwas Erbarmen 😉

Gruss

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Wenn du dir die Doku zu der Python DB-API durchliest, wirst du feststellen, dass Python "Prepared Statements" unterstützt. Dabei zeigt der Programmierer dem Modul, was das Statement und was die Daten sind, und dann kümmert sich das Modul oder das DBMS selbstständig ums korrekte Maskieren. Das Ganze sieht dann grob so aus:

c.execute('INSERT INTO my_table(my_column) VALUES ?:', my_very_long_python_string)


So oder so ähnlich, schlag mich nicht, wenn das falsch war, ich habe ORMs sei dank schon lange nicht mit mehr mit SQL hantieren müssen 😉

Swissren

(Themenstarter)
Avatar von Swissren

Anmeldungsdatum:
3. September 2006

Beiträge: 182

Danke für die Antwort.

Hört sich gut an, werde das morgen mal ausprobieren, hoffentlich klappts 😛

Schönen Abend noch

Swissren

(Themenstarter)
Avatar von Swissren

Anmeldungsdatum:
3. September 2006

Beiträge: 182

Super, so funktioniert das prima. Ich habe als Platzhalter %s verwendet:

cursor.execute("INSERT INTO meine_tabelle (spalte1, spalte2) VALUES (%s, %s)", (array[0], array[1]))

[x] gelöst

Danke & Gruss

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

Beiträge: 1253

cursor.execute("INSERT INTO meine_tabelle (spalte1, spalte2) VALUES (%s, %s)", array[0:1])

😉

Antworten |