Seite 1 von 1

MySQLdb: executemany liefert Probleme

Verfasst: Donnerstag 3. März 2011, 17:48
von microkernel
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

Re: MySQLdb: executemany liefert Probleme

Verfasst: Donnerstag 3. März 2011, 18:52
von microkernel
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

Re: MySQLdb: executemany liefert Probleme

Verfasst: Donnerstag 3. März 2011, 23:45
von sparrow
Hallo Microkernel,

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

Ich würde mir das gleich Abgewöhnen.

Re: MySQLdb: executemany liefert Probleme

Verfasst: Samstag 5. März 2011, 15:55
von microkernel
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?

Re: MySQLdb: executemany liefert Probleme

Verfasst: Samstag 5. März 2011, 22:04
von noisefloor
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