Benutzer-Werkzeuge

Webseiten-Werkzeuge


python:python_mysql

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.

SQL-Parameter sollten immer als Tupel an die execute-methode übergeben werden, und nicht als zusammengesetzter String!

python/python_mysql.txt · Zuletzt geändert: 2013/10/29 11:58 von 2007