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()
sqlite3 suchen mit variabeln
@nurmili: dafür gibt es in der Dokumentation im ersten Abschnitt ein Beispiel.
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 ????
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 ????
@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.
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 !!!!!!!
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 !!!!!!!
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Fuer die Zukunft: Bitte benutze Python-Tags fuer deinen Code, dafuer gibt es ueber dem Eingabefeld einen Button namens "Code".
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Hallo Leute,
eine Frage hätte ich noch !
Folgender Code läuft:
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 !
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()
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 !
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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:
Demenstrechend muss das `execute` so lauten:
Code: Alles auswählen
dbcursor.execute('SELECT * FROM fueller WHERE kennung=?', (ke,))
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte