2016-05-30 3 views
0

[введите описание изображения здесь] [1] В настоящее время я делаю проект для школы, и настало время для достижения стены.Неспособность получить данные из базы данных MySQLdb

Я пытаюсь извлечь данные из порта USB на Raspberry Pi 3+. Я подключил Arduino Nano, и я отправляю строку (номер UID в десятичной форме от RFID-карты) от нее до Pi через USB-порт. Здесь все отлично работает, я могу распечатать строку (ID) без проблем. Я сравниваю идентификатор с картой с той, что находится в моей базе данных, и, если ставить статический номер (см. Ниже в коде), он печатает данные. Однако, если я пытаюсь использовать последовательную линию, ничего не происходит. Похоже, что он не получает данные вообще. Внешний вид моей базы данных находится под ним и код python. Спасибо заранее! !

card_id serial_no LastName FirstName 
    1 | 2136106133 | Hansen | Peter  | 
    2 | 117254270 | Larsen | Thompson | 

#/USR/бен/окр питон

import MySQLdb 
import serial 


ser = serial.Serial('/dev/ttyUSB0',9600) 
db = MySQLdb.connect(host="localhost", # your host, usually localhost 
       user="root",   # your username 
       passwd="root", # your password 
       db="RFID")  # name of the data base 
cur=db.cursor() 

CardID = 0 
LastName = "" 
FirstName = "" 

while True: 
    CardID=ser.readline() 

    print "pweasda" 
    print CardID 
    print "pewpew" 
    # CardID = 117254270 - this works. The problem is that I have many RFID cards/tags with different IDs of course. With this statement it prints everything correctly. 

    cur.execute('SELECT * FROM cards WHERE serial_no=%s',(CardID)) 
    results = cur.fetchall() 
    for row in results: 
     FirstName = row[3] 
     LastName = row [2] 
     serial_no = row [1] 
     card_id = row [0] 
     #print the fetched results 
     print "FirstName=%s,LastName=%s,serial_no=%s,card_id=%s" % \ 
     (FirstName, LastName, serial_no, card_id) 
     db.commit() 
     print "Data committed" 

вывода изображения (без ошибок): [1]: http://postimg.org/image/jf2doogrv/

+0

Ваша база данных находится в MySql или sqlite? –

+0

Как вы можете видеть в начале моего кода на Python, он говорит import MySQLdb. Однако я также пробовал использовать sqlite3. Тот же результат – Smesh

+0

нет, выше код будет работать только с mysql! –

ответ

0

Возможное решение может быть:

import sqlite3 
conn = sqlite3.connect("users.db")#path to your sqlite db file! 
cursor = conn.cursor() 
CardID=ser.readline().strip() 


sql = "SELECT * FROM cards WHERE serial_no=?" 
cursor.execute(sql, [(CardID)]) 
try: 
    results = cursor.fetchall()[0]# just fetching the first row only, you can loop through all rows here! 
    FirstName = results[3] 
    LastName = results[2] 
    serial_no = results[1] 
    card_id = results[0] 
    print "FirstName=%s,LastName=%s,serial_no=%s,card_id=%s" % \ 
    (FirstName, LastName, serial_no, card_id) 

except IndexError as e: 
    print 'CardID Not Exist'+str(e) 
except Exception as e2: 
    print(str(e2)) 

В приведенном выше коде я предполагаю, что база данных находится в sqlite DB, а также обрабатывает исключения, чтобы вы могли определить время выполнения ошибка, если таковая имеется!

+0

спасибо, я попробую сейчас. – Smesh

+0

Собственно, с вашего скриншота вы используете неправильный CardID, в предложении where, которое не находится в db, поэтому в конце концов он не войдет в цикл for, иначе ваш код будет прав! –

+0

есть, мой плохой - другой карта. Все еще не работает с правильными идентификаторами. Таким образом, это дает мне следующий результат: CardID не существует - индекс за пределами диапазона (ваше решение) – Smesh