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

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

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

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

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

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
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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

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

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