Benutzer-Werkzeuge

Webseiten-Werkzeuge


python:python_mysql

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.

python/python_mysql.1316517216.txt.gz · Zuletzt geändert: 2024/08/07 13:35 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki