Datenbank+RFID

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Salis
User
Beiträge: 4
Registriert: Dienstag 1. November 2016, 21:36

Hi ,
ich habe ein Programm für RFID-modul geschrieben. Ich möchte mit meinem RFID auf den Datenbank zugreifen und wenn die ID-card ,die in DB registriert ist, gefunden wird soll Türschloss aufgehen. Leider weiss ich gar nicht wie ich das machen soll:(

Code: Alles auswählen

db = MySQL.connect(host="localhost","user="root", passwd="sk1290", db="schrank")
sur =db.cursor()
cur.execute("SELECT * FROM perso WHERE cid = %s",MIFAREReader)

if status ==MIFAREReder.MI_OK:
     found_rows =cur.fetchall()
     print(found_rows)
     if found_rows:
        for row in cur.fetchall():
             cid = str(row[2])
             if cid:
             print ("bitte rein")
else:
     print("kein Zugang")
(jetzt mal ohne schloss)


das funktioniert nicht. :K Das Programm überspringt sofort zu(" Keine Zugang") und liesst die karten UID aus dem DB nicht.
Ich habe separat Programm geschrieben um zu testen ob ich mich mit DB vebinden kann, und es hat funktioniert, ich kann die Daten aus dem DB ohne RFID auslesen.

Kann mir bitte jemand helfen mit dem code ??????

danke
Salis
Zuletzt geändert von Anonymous am Mittwoch 2. November 2016, 00:32, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Salis: zuerst einmal, ›cur‹ wird nirgends definiert, nur ›sur‹ und was ist ›MIFAREReader‹ und was hat das mit ›MIFAREReder‹ zu tun? Nachdem einmal ›fetchall‹ aufgerufen worden ist, sind alle Zeilen gelesen und ein weiteres Lesen liefert nichts mehr. Damit ist ›cid‹ nicht definiert. Es ist also sehr verwunderlich, dass da überhaupt was ausgegeben wird und nicht irgendein anderer Fehler kommt.
Salis
User
Beiträge: 4
Registriert: Dienstag 1. November 2016, 21:36

ja stimmt statt sur=db.cursor() soll cur = db.cursor() stehen , habe verbessert.
MIFAREReader ist mein RFID.......
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Salis: jetzt mit SyntaxHighlighting sieht man auch, dass in der ersten Zeile ein Anführungszeichen zu viel ist und ab Zeile 11 die Einrückung nicht stimmt. Ohne korrekten Code kann man ja schlecht Fehler finden. So wie es jetzt dasteht, würde ich sagen `status != MIFAREReder.MI_OK`. Hast Du das schon überprüft?
Salis
User
Beiträge: 4
Registriert: Dienstag 1. November 2016, 21:36

jetzt jedes mal wenn ich die Karte einscanne kommen alle Daten aus dem DB ausgegeben. Ich will aber das es nur die eingescannte Karte gelesen wird. Es zeigt zugang berechtigt auch mit Karten die nicht in DB sind......

Code: Alles auswählen

con = MySQLdb.connect(host="localhost", user="root", passwd="sk1290", db="schrank")
cur = con.sursor()


if status == MIFAREReader.MI_OK:
   cur.execute("SELECT id, name, cid FROM schrank;")
   for row in cur.fetchall() :
     if uid == 1:
        print ("Zugang")
     else:
        print ("kein Zugang")
wie bekomme ich dass nur cid aus dem db erkannt werden und alle fremde als keine Zugang?
Zuletzt geändert von Anonymous am Donnerstag 3. November 2016, 11:02, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Salis: Du hast die WHERE-Clause weggeschmissen und wunderst Dich, dass Du alle Datensätze bekommst‽ Außerdem bekommst Du außer einem NameError nichts, `uid` ist nicht definiert.
BlackJack

@Sirius: Fast richtig, der `AttributeError` weil `Connection`-Objekte kein `sursor`-Attribut haben, kommt früher als der `NameError`. ;-) Oh, und auch der würde schon bei `status` kommen und falls das definiert wäre erst noch bei `MIFAREReader`. SCNR

@Salis: Du zeigst offensichtlich nicht Code denn Du tatsächlich ausführst, sondern welchen den Du abtippst (?) oder der so ähnlich aussieht wie das was Du tatsächlich ausführst. Es macht nicht so viel Sinn Fehler in Code zu suchen der gar nicht der tatsächliche ist, und damit vielleicht auch gar nicht das eigentliche Problem enthält und, wie wir hier mehrfach gesehen haben, auf jeden Fall *andere* Probleme enthält, die in dem Code den Du tatsächlich hast, so nicht enthalten sein können.
Antworten