Seite 1 von 1

sql mit variablen

Verfasst: Montag 4. November 2013, 14:57
von Pythomania007
Hallo alle zusammen.

Ich verwende in meiner Seminararbeit eine Sql datenbank. jetzt möchte ich eine Abfrage machen, wobei ich die Strings aus einem entry auslese und dann als eingabewert bei der select abfrage nutzen möchte. kann mir jemand weiterhelfen ?

Code: Alles auswählen

def raumnummer(a):
    cursor.execute("""SELECT * FROM raum WHERE raumnummer IS (§)   """,(a))
    return cursor.fetchall()
danke schomal :?

Re: sql mit variablen

Verfasst: Montag 4. November 2013, 15:40
von bfm
Das hier sollte deine Lösung sein:
http://www.python-forum.de/viewtopic.php?f=23&t=29880

Re: sql mit variablen

Verfasst: Montag 4. November 2013, 15:51
von BlackJack
@Pythomania007: Dazu musst Du im SQL Platzhalter für die Werte schreiben und das zweite Argument von `execute()` muss ein Tupel oder allgemein eine Sequenz sein. Wie die Platzhalter aussehen hängt leider vom verwendeten DB-Modul ab und sollte dort in der Dokumentation nachzulesen sein. Einer der Gründe warum ich auch für solche Sachen schon SQLAlchemy verwende um von der Platzhalter-Syntax zu abstrahieren.

Das SQL dürfte übrigens auch mit dem passenden Platzhalter nicht richtig sein. ``IS`` sollte ein ``=`` sein.

Ansonsten hoffe ich dass das nur ein achtlos zusammengetipptes Beispiel ist, denn der Argumentname `a` ist schlecht, da zu nichtssagend, `cursor` wird nicht als Argument übergeben sondern kommt magisch aus dem Nichts, und unter der Annahme das `raumnummer` der Primärschlüssel oder zumindest UNIQUE ist, würde man keine Sequenz mit grundsätzlich nur *einem* Element als Rückgabwert erwarten, sondern tatsächlich nur die Raumdaten zu der einen Raumnummer. Der Funktionsname ist auch nicht gut gewählt. `raumnummer()` beschreibt keine Tätigkeit und schon gar nicht was die Funktion macht. Das wäre eher so etwas wie `get_room_by_room_number()`.

Der * im SELECT ist normalerweise auch nicht zu empfehlen. Man macht das Programm damit abhängig von der Anzahl und Reihenfolge der Spalten. Das kann sich durchaus mal ändern. Ausserdem ist das Programm verständlicher wenn man dort explizit die Spalten angibt, die man abfragt.