Dies ist eine alte Version des Dokuments!
allgemeine Syntax
import MySQLdb conn=MySQLdb.connect(user="root",passwd="",db="somedb") curs=conn.cursor() curs.execute("""select * from foobar""") allezeilen=curs.fetchall() conn.close()
MySQLdb: übergabe von parametern an cursor.execute()
immer wieder ein Grund zum Verzweifeln, was bedeuten diese zwei Möglichkeiten der Übergabe von Variablen an einen SQL-Befehl:
table="foobar" cursor.execute(""" select * from %s where blabla = 'S'""", (table))
funzt nicht, aber dieses hier:
table="foobar" cursor.execute(""" select * from %s where blabla = 'S'""" % table)
Hier meine Erklärung:
Der Komma-Operator als Teil der execute-Methode wandelt automatisch übergebene Variablen (als Tupel) in SQL-konforme Werte, aus „foobar“ wird also 'foobar', und eine 34 bleibt eine 34, wenn die Variable ein Integer ist.
Aus „foobar“ wird also 'foobar', und
SELECT * FROM 'foobar'
ist eben ein ungültiger SQL-Befehl (Tabellenname in einfachen Hochkommas).
Wenn man also auch den Tabellennamen als Variable übergeben möchte, muß man sich mit einem verketteten String aushelfen:
table="foobar" blabla="einText" nummer=34 cursor.execute(""" select * from """ + table + """ where blabla = %s and nummer = %s""", (blabla,nummer))
Es wird dabei IMMER der Operator %s benutzt, also auch bei Integer.