[gelöst] mysql_escape_string Äquivalent für Python?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
Ravetracer
User
Beiträge: 7
Registriert: Montag 10. Dezember 2007, 14:50

Freitag 12. September 2008, 09:51

Hallo zusammen.
Ich programmiere gerade ein Importscript für eine MySQL-Tabelle.
Die Quellen enthalten Texte, welche alle möglichen Sonderzeichen enthalten können.
Wie kann ich die Texte escapen, wie in PHP mit mysql_escape_string? Ich bekomme immer Fehlermeldungen, wenn z.B. ein Hochkomma auftaucht.

/EDIT:
Ok, in der Zwischenzeit habe ich die Lösung schon gefunden, per

import _mysql

und _mysql.escape_string()
lunar

Freitag 12. September 2008, 10:36

Bitte nicht ... dafür nutzt man Platzhalter, lies doch einfach nochmal die Doku.
BlackJack

Freitag 12. September 2008, 10:43

Nein das ist keine Lösung. Lass das "escapen" das Datenbankmodul automatisch für Dich machen. Die Werte sollte man nicht selber in die Zeichenkette hineinformatieren sondern `execute()` die Arbeit überlassen.

Namen die mit einem Unterstrich beginnen, kennzeichnen Implementierungsdetails, also lass besser die Finger von dem Modul.
Benutzeravatar
Ravetracer
User
Beiträge: 7
Registriert: Montag 10. Dezember 2007, 14:50

Freitag 12. September 2008, 11:20

Meint ihr diese Doku hier?

http://mysql-python.sourceforge.net/MySQLdb.html

Das sagt mir leider nicht viel über das Escapen.
Wie muss ich es denn richtig machen?
Ich fange gerade erst mit MySQL unter Python an (mit Python selbst nicht ;) ).
Außerdem habe ich schon ewig nichts mehr mit Python gemacht und muss erstmal wieder reinkommen.

/EDIT:
Hier ist mal mein Code, wie ich ihn bisher habe:

Code: Alles auswählen

conn = MySQLdb.connect(host="...",user="...",passwd="...",db="...")
cursor = conn.cursor(MySQLdb.cursors.DictCursor)
cursor.execute("SELECT id_user,datum,taetigkeit FROM prc_taetigkeit")
rows1 = cursor.fetchall()
sql_1 = "INSERT INTO vbase_dayreports (id_user,reportDay,r_sonstiges) VALUES "

for row in rows1:
    sql_1+="(%s,'%s','%s')," % (row["id_user"],row["datum"],row["taetigkeit"])

sql_1 = sql_1[:-1]

cursor.execute(sql_1)
Vielleicht habt ihr ja 'nen Vorschlag.
Ich bekomme immer nur 'ne Fehlermeldung.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 12. September 2008, 11:29

[wiki]Parametrisierte SQL-Queries[/wiki]
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Ravetracer
User
Beiträge: 7
Registriert: Montag 10. Dezember 2007, 14:50

Freitag 12. September 2008, 11:37

Ok, hab ein wenig weitergelesen.
So ist das nun ok, oder?

Code: Alles auswählen

sqlvars = []
for row in rows1:
    sqlvars.append((row["id_user"],row["datum"],row["taetigkeit"]))

print(sqlvars)
sql_1 = "INSERT INTO vbase_dayreports (id_user,reportDay,r_sonstiges) VALUES (%s,%s,%s)"
cursor.executemany(sql_1,sqlvars)

cursor.close()
conn.close()
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Dienstag 16. September 2008, 22:28

Sieht doch auch viel hübscher aus, nicht wahr? :D
Antworten