Dies ist eine alte Version des Dokuments!
allgemeine Syntax
<source lang=„python“> import MySQLdb conn=MySQLdb.connect(user=„root“,passwd=„“,db=„somedb“) curs=conn.cursor() curs.execute(„“„select * from foobar“„“) allezeilen=curs.fetchall() conn.close() </source>
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:
<source lang=„python“> table=„foobar“ cursor.execute(„“„
select * from %s where blabla = 'S'""", (table))
</source>
funzt nicht, aber dieses hier:
<source lang=„python“> table=„foobar“ cursor.execute(“„“
select * from %s where blabla = 'S'""" % table)
</source>
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
<source lang=„sql“> SELECT * from 'foobar' </source>
ist eben ein ungültiger SQL-Befehl (Tabellenname in Hochkommas).
Wenn man also auch den Tabellennamen als Variable übergeben möchte, muß man sich mit einem verketteten String aushelfen:
<source lang=„python“> table=„foobar“ blabla=„einText“ nummer=34 cursor.execute(„“„
select * from """ + table + """ where blabla = %s and nummer = %s""", (blabla,nummer))
</source>
Es wird dabei IMMER der Operator %s benutzt, also auch bei Integer.