Seite 1 von 1
WHERE-Bedingung mit Variable
Verfasst: Sonntag 19. August 2012, 16:26
von Seires
Hey,
ich habe eine WHERE Bedingung, die sich je nach Auswahl des Users in einem Dropdownfeld ändern soll. Scheitere momentan aber daran, die WHERE-Bedingung mit einer Variable zu übergeben.
So sieht mein Code aus ('datum' ist die Spalte, 'userdatum' der vom Nutzer ausgewählte Wert:
Code: Alles auswählen
cursor.execute("SELECT * FROM eintraege WHERE datum=%s),userdatum
Bekomme als Fehlermeldung:
Kann mir jemand helfen, wie es richtig geht?
Vielen Dank schonmal für jede Hilfe

Re: WHERE-Bedingung mit Variable
Verfasst: Sonntag 19. August 2012, 16:38
von Hyperion
Hast Du Dir mal die Doku zu `execute` angeguckt? Vermutlich nicht, denn dort steht es genau und sogar mit Beispielen

Also, schau in der Doku unter `Cursor.execute` nach.
Re: WHERE-Bedingung mit Variable
Verfasst: Sonntag 19. August 2012, 18:46
von /me
Seires hat geschrieben:Code: Alles auswählen
cursor.execute("SELECT * FROM eintraege WHERE datum=%s),userdatum
Gut, dass es nicht funktioniert hat. Das manuelle Zusammenbauen eines SQL-Strings mit %s ist potenziell böse. Verwende
? wie in der
sqlite3-Dokumentation vorgeschlagen und achte darauf, wo du deine Klammern und Anführungszeichen setzt.
Re: WHERE-Bedingung mit Variable
Verfasst: Sonntag 19. August 2012, 21:32
von Seires
Habe es jetzt gelöst mit
Code: Alles auswählen
cursor.execute("SELECT * FROM eintraege WHERE datum=?", ('%'+userdatum+'%',))
So müsste es sicher sein und funktioniert auch noch

Danke für die Hilfe!
Re: WHERE-Bedingung mit Variable
Verfasst: Sonntag 19. August 2012, 22:40
von EyDu
Was genau bezweckst du mit den Prozentzeichen?
Re: WHERE-Bedingung mit Variable
Verfasst: Sonntag 19. August 2012, 23:24
von Seires
Das ist ne gute Frage

Hatte es von
http://stackoverflow.com/questions/4409 ... -wildcards, habe es aber inzwischen auch umgewandelt in
Code: Alles auswählen
cursor.execute("SELECT * FROM eintraege WHERE datum=?", (userdatum,))
Nur das Komma nach "userdatum" ist wichtig, sonst will er jedes Zeichen als einzelnen Wert übergeben und nicht als gemeinsamen String...
Re: WHERE-Bedingung mit Variable
Verfasst: Montag 20. August 2012, 08:18
von EyDu
Seires hat geschrieben:Nur das Komma nach "userdatum" ist wichtig, sonst will er jedes Zeichen als einzelnen Wert übergeben und nicht als gemeinsamen String...
Naja, execute erwartet eben etwas iterierbares, was auf einen String recht gut passt. Mittels eines Tupels kannst du daher so beliebig viele Werte in deinem Ausdruck ersetzen lassen.
Re: WHERE-Bedingung mit Variable
Verfasst: Donnerstag 14. März 2013, 09:46
von bfm
Hallo zusammen,
an dem kleinen Komma bin ich auch gescheitert. Ich glaube, das werde ich nie wieder vergessen!
mfg
Re: WHERE-Bedingung mit Variable
Verfasst: Donnerstag 14. März 2013, 12:03
von /me
bfm hat geschrieben:an dem kleinen Komma bin ich auch gescheitert. Ich glaube, das werde ich nie wieder vergessen!
Man muss sich halt klar machen, welcher Datentyp erwartet wird und welchen man übergibt.
Code: Alles auswählen
>>> print type(('foo'))
<type 'str'>
>>> print type(('foo',))
<type 'tuple'>
>>> for element in ('foo'):
print element
f
o
o
>>> for element in ('foo',):
print element
foo