Benutzer-Werkzeuge

Webseiten-Werkzeuge


python:python_mysql

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.

python/python_mysql.1366967813.txt.gz · Zuletzt geändert: 2013/04/26 11:16 von 2007