sql mit variablen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Pythomania007
User
Beiträge: 1
Registriert: Montag 4. November 2013, 14:20

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 :?
Zuletzt geändert von Anonymous am Montag 4. November 2013, 15:38, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

Das hier sollte deine Lösung sein:
http://www.python-forum.de/viewtopic.php?f=23&t=29880
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.
Antworten