sql abfrage

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

ich sitze hier an einer komischen Sache, an einer sql Abfrage, hier erst mal mein Snipe:

Code: Alles auswählen

... where id=?""", daten_id)
diese Abfrage funktioniert so lange, bis daten_id noch keine 10 erreicht hat, denn dann bekomme ich eine Meldung, die besagt, das ich mehr als einen Wert an die sql Abfrage sende.
Wenn ich mir die daten_id per print ausgeben lasse, steht dort auch eine 10 drin, so wie es auch sein soll.
Dann dachte ich mir, ich mache die 10 einfach mal zum testen, fest in die Abfrage rein:

Code: Alles auswählen

... where id=10""")
und siehe da, das funktioniert. Warum aber nicht mit der ersten Version, also das Beispiel oben ???
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du musst ein Tupel übergeben!

Code: Alles auswählen

cursor.execute("select foo from bar where x=?", (var,))
Wieso es allerdings mit falscher Semantik funktioniert haben soll, kapiere ich nicht.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

danke sehr, genau das wars !!!
ja, es geht ohne Tupel. Ich denke ich werde das in meinen anderen Abfragen dann auch mal schnell ändern. Man lernt nicht aus.
BlackJack

Ich würde mal vermuten, dass Du eine Zeichenkette übergeben hast. Und die *Zeichenkette* '10' ist zwei Elemente lang, während Zeichenketten mit einem Zahlenwert <10 nur ein Element enthalten.
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Genau das habe ich auch vermutet.
Allerdings in manchen Abfragen, habe ich nur ein Dictionary üebrgeben. Das ging auch.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Steht ja auch in der Doku beschrieben: http://docs.python.org/library/sqlite3. ... or-objects
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Sehr komisch, ich hatte das nicht gefunden.
Antworten