无法从MySQLdb数据库获取数据

2024-05-04 02:17:02 发布

您现在位置:Python中文网/ 问答频道 /正文

[在这里输入图像描述][1]我正在为学校做一个项目,到达墙的时间到了。你知道吗

我正在尝试从Raspberry Pi 3+上的USB端口获取数据。我已经连接了一个Arduino Nano,我正在通过USB端口将一个字符串(RFID卡的十进制UID数字)从它发送到Pi。这里一切正常,我可以毫无问题地打印出字符串(ID)。我将卡中的ID与数据库中的ID进行比较,如果我输入一个静态数字(在下面的代码中注释),它将打印数据。但是,如果我尝试串行线,什么也不会发生。它似乎根本无法获取数据。我的数据库的外观在下面,python代码也在下面。 提前谢谢!!你知道吗

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

#!/usr/bin/env python文件

 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/


Tags: noiddbyourserialfirstnamecardresults
1条回答
网友
1楼 · 发布于 2024-05-04 02:17:02

可能的解决方案是:

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)) 

在上面的代码中,我假设数据库是在sqlitedb中,并且还处理了异常,这样您就可以找出运行时错误(如果有的话)!你知道吗

相关问题 更多 >