Seite 1 von 1

sqlite3 suchen mit variabeln

Verfasst: Sonntag 16. August 2015, 08:22
von nurmili
Hallo Leute, ich bin neu in der Python programmierung !
Ich bräuchte mal eure Hilfe.
Aufgabenstellung:
Ich habe eine Datenbank mit dem Namen "nutzer.db" und die Tabelle "fueller".
In der Tabelle gibts eine Spallte "kennung" in der eine 10stellige Nummer steht.
Ich lese einen RFID Chip in eine Variabel und möchte diese Variabel in der Spalte
"kennung" suchen. Ob die Nummer vorhanden ist möchte ich mit IF - Else auswerten.
Folgender Code funktioniert. Aber ich möchte ja anstatt `0003839146` hier eine Variabel
einsetzen und das bekomme ich nicht hin.
Im voraus vielen Dank für eure Hilfe

import sqlite3
con = sqlite3.connect("nutzer.db")
dbcursor = con.cursor()
dbcursor.execute("SELECT * FROM `fueller` WHERE `kennung` = '0003839146' ")
for datensatz in dbcursor:
print(datensatz)

con.close()

Re: sqlite3 suchen mit variabeln

Verfasst: Sonntag 16. August 2015, 09:02
von Sirius3
@nurmili: dafür gibt es in der Dokumentation im ersten Abschnitt ein Beispiel.

Re: sqlite3 suchen mit variabeln

Verfasst: Sonntag 16. August 2015, 13:28
von nurmili
Habs versucht !!
und zwar so:

import sqlite3
con = sqlite3.connect("nutzer.db")
dbcursor = con.cursor()
ke = ('0003839146 ',)
dbcursor.execute('SELECT * FROM fueller WHERE ke=?', ke)
print(dbcursor.fetchone())
con.close()

und habe folgende Fehlermeldung bekommen :

Traceback (most recent call last):
File "abfragen4.py", line 10, in <module>
dbcursor.execute('SELECT * FROM fueller WHERE ke=?', ke)
sqlite3.OperationalError: no such column: ke


Was mach ich falsch ???? :cry:

Re: sqlite3 suchen mit variabeln

Verfasst: Sonntag 16. August 2015, 14:17
von BlackJack
@nurmili: Heisst die Datenbankspalte den `ke`? Wohl kaum, denn sonst hättest Du nicht diese Fehlermeldung bekommen. Die heisst in Deinem ersten Beitrag auch noch `kennung`. Und so sollte sie auch heissen wenn Du das Schema in der Hand hast, denn kryptische Abkürzungen für Namen sollten nicht sein.

Re: sqlite3 suchen mit variabeln

Verfasst: Sonntag 16. August 2015, 14:57
von nurmili
Hallo Black Jack

du hast natürlich recht !!!!!!!
So funktionierts:

import sqlite3

con = sqlite3.connect("nutzer.db")
dbcursor = con.cursor()

ke = ('0003839146',)

dbcursor.execute('SELECT * FROM fueller WHERE kennung=?', ke)
print(dbcursor.fetchone())

con.close()


Vieeeeeeelen dank !!!!!!! :wink: :wink:

Re: sqlite3 suchen mit variabeln

Verfasst: Sonntag 16. August 2015, 15:05
von cofi
Fuer die Zukunft: Bitte benutze Python-Tags fuer deinen Code, dafuer gibt es ueber dem Eingabefeld einen Button namens "Code".

Re: sqlite3 suchen mit variabeln

Verfasst: Sonntag 16. August 2015, 16:51
von nurmili
Hallo Leute,
eine Frage hätte ich noch !

Folgender Code läuft:

Code: Alles auswählen

import sqlite3

con = sqlite3.connect("nutzer.db")
dbcursor = con.cursor()

ke = ("0003839146",)

dbcursor.execute('SELECT * FROM fueller WHERE kennung=?', ke)

a = (dbcursor.fetchone())

if a == None:
	print ("Chip nicht registriert")
else:
	print ("Zugang ok")


con.close()
Wenn ich aber die Zeile 6
ke = ("0003839146",)
durch
ke = input()
ersetze , und über die Tastaur eingebe bekomme ich folgende Fehlermeldung:

dbcursor.execute('SELECT * FROM fueller WHERE kennung=?', ke)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 10 supplied.

Wo ist denn der Unterschied zwischen
ke = ("0003839146",) und ke = input() ???????

Wenn ich das noch gelöst bekomme, denk ich, dann hab ichs !

nochmal vielen Dank im voraus !

Re: sqlite3 suchen mit variabeln

Verfasst: Sonntag 16. August 2015, 17:10
von cofi
Der Unterschied ist, dass das funktionierende `ke` ein Tupel ist und das Ergebnis von `input` ein String (wenn du Python3 benutzt, wenn nicht solltest du `raw_input` benutzen).

Demenstrechend muss das `execute` so lauten:

Code: Alles auswählen

dbcursor.execute('SELECT * FROM fueller WHERE kennung=?', (ke,))

Re: sqlite3 suchen mit variabeln

Verfasst: Sonntag 16. August 2015, 17:54
von nurmili
Du bist genial !!!!!!!!
Es funktioniert !!!! :lol: :lol: :lol:
Einfach ein geiles Forum !