MySQLdb: executemany liefert Probleme

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Hallo,

ich möchte gerne mehrere SELECT Abfragen mittels der MySQLdb-Funktion CURSOR.EXECUTEMANY an die MySQL Datenbank schicken. Dabei passiert immer folgendes:

Code: Alles auswählen

>>>mehrere_ids = map(lambda l: [l,], range(50))
>>>count = cursor.executemany("SELECT * FROM tabelle WHERE id=%s", mehrere_ids)
>>>print count #dabei wird mir die anzahl von einträgen angezeigt welche ich auch eigentlich erhalten soll
(z.B.) 200
>>># wenn ich nun aber die %count% Ergebnisse mir holen will passiert folgendes
>>>rows = cursor.fetchall()
>>>print len(rows) # dabei wird mir immer nur EINE zeile anstatt %count% Zeilen zurückgeworfen
1
Nun verstehe ich aber nicht warum ich nur eine Zeile bekomme wenn ich doch eigentlich z.B. 200 Zeilen bekommen sollte...
Wie kann ich dieses Problem lösen?

Lg
microkernel
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Ok ich habe die Antwort bereits selber gefunden. Anstatt EXECUTEMANY nutze ich einfach eine andere Variante:

Code: Alles auswählen

>>>mehrere_ids = tuple(map(lambda l: [l,], range(50)))
>>>count = cursor.execute("SELECT * FROM tabelle WHERE id IN %s"%format(mehrere_ids))
>>>print count
(z.B.) 200
>>>rows = cursor.fetchall()
>>>len(rows)
200
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

Hallo Microkernel,

denkst du daran, dass bei diesem Code eine SQL-Inkektion möglich ist?

Ich würde mir das gleich Abgewöhnen.
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Ja klar ist mir das bewusst. Aber es gibt bei meinen Programm keine Schnittstelle wo der User in nur geringster Weise einen Einfluss auf die Liste hat. Demnach kann er doch auch keine Angriffe ausüben, oder etwa doch?
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

nein, dann nicht. Nichts desto trotz sollte man sich sowas erst gar nicht angewöhnen, weil es halt immer eine _potentielle_ Sicherheitslücke ist.

Gruß, noisefloor
Antworten