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:

Code: Alles auswählen

sqlite3.OperationalError: near "%": syntax error
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 :D
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! :lol:

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! :lol:
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