stillbad
Goto Top

Select mit String aus zwei Zahlen in SQLite3

Hallo,

ich versuche mich gerade an einem "Text Adventure" da ich Python besser kennenlernen möchte.
Doch dabei stoße ich jetzt wo ich Code und Datenbank fertig habe auf ein Problem mit dem Modul SQLite3 da dieses anscheinend bei folgendem Code abschnitt keinen String aus zwei Charactern für SELECT nutzen kann:
cur.execute("SELECT Beschreibung FROM btoe WHERE raum_id=?",  id)  
oder
cur.execute("SELECT Beschreibung FROM btoe WHERE raum_id=?", "10")  
Das bedeutet das ich nicht mit einem String suchen kann der aus zwei Zeichen oder mehr besteht aber das wäre ziemlich dumm da du damit bei großen Datenbanken das Modul ja in die Tonne kloppen könntest.
Deswegen denke ich das es hier in der Community jemanden gibt der sich damit besser auskennt.
Folgender Fehler wird ausgegeben:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.

LG.: StillBad

Content-Key: 570693

Url: https://administrator.de/contentid/570693

Printed on: April 19, 2024 at 03:04 o'clock

Mitglied: 143728
Solution 143728 May 09, 2020 updated at 10:19:12 (UTC)
Goto Top
Das bedeutet das ich nicht mit einem String suchen kann der aus zwei Zeichen oder mehr besteht
Das ist natürlich Blödsinn, sagt einem ja schon der gesunde Menschenverstand. Dagegen hilft wie immer mal ins Manual zu schauen..
https://docs.python.org/3/library/sqlite3.html#sqlite3.Cursor.execute
Schreib das zweite Argument als tuple, oder eben als named object
id = 234
cur.execute("SELECT Beschreibung FROM btoe WHERE raum_id=?", (id,))  
Member: StillBad
StillBad May 09, 2020 at 10:17:18 (UTC)
Goto Top
Danke für die schnelle Antwort mein Code funktioniert jetzt und sieht wie folgt aus:
cur.execute("SELECT Beschreibung FROM btoe WHERE raum_id=:id", {"id": id})  

Das das Blödsinn ist dachte ich auch deswegen habe ich ja gefragt aber an das Manual habe ich einfach nicht gedacht.

Nochmals Danke,
StillBad
Member: StillBad
StillBad May 09, 2020 updated at 10:21:14 (UTC)
Goto Top
Zitat von @143728:
Schreib das zweite Argument als tuple, oder eben als named object
> id = 234
> cur.execute("SELECT Beschreibung FROM btoe WHERE raum_id=?", (id,))  
> 

So wie du es da stehen hast hatte ich es schon vorher probiert hat aber seltsamer weise trotzdem nicht funktioniert.
Mitglied: 143728
143728 May 09, 2020 at 10:21:33 (UTC)
Goto Top
Zitat von @StillBad:

aber an das Manual habe ich einfach nicht gedacht.
Gehört als Entwickler immer parat auf den zweiten Monitor gelegt face-wink.
Nochmals Danke,
Bidde.
Mitglied: 143728
143728 May 09, 2020 updated at 10:24:53 (UTC)
Goto Top
Zitat von @StillBad:
So wie du es da stehen hast hatte ich es schon vorher probiert hat aber seltsamer weise trotzdem nicht funktioniert.
Das liegt dann entweder an einem Fehler bei dir (Komma vergessen) oder eine ältere Python Version, klappt hier nämlich problemlos.
Member: StillBad
StillBad May 09, 2020 at 10:25:38 (UTC)
Goto Top
Naja Funktioniert jetzt auch so also werde ich es so lassen ^^