我是Python的新手。我的任务是从Arduino获取串行端口输出,然后使用Python将输出推送到Microsoft SQL数据库。
我的Arduino项目正在使用指纹记录学生的出勤情况。每次学生扫描指纹时,Arduino都会生成如下输出:
{'SID':1,'Date':2018/11/18,'Time':12:17:36}
{'SID':2,'Date':2018/11/18,'Time':12:28:02}
...
...
我想让Python代码获取这些输出,并将其推送到Microsoft SQL数据库。我想使其实时化,这意味着当学生扫描指纹时,输出每次都会推送到MSSQL。所以我在Python中有一个while循环:
import pyodbc
import serial
import time
import datetime
import ast
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
"Server=DESKTOP-H7KQUT1;"
"Database=SAOS1;"
"Trusted_Connection=yes;")
cursor = cnxn.cursor()
arduino = serial.Serial('COM4', 9600, timeout=.1)
while True:
data = arduino.readline()[:-2].decode("utf-8")
if data!="":
Atd_Date = ast.literal_eval(data)['Date']
Atd_InTime = ast.literal_eval(data)['Time']
SID = ast.literal_eval(data)['SID']
tsql = "INSERT INTO attendance (Atd_Date, Atd_InTime, SID) VALUES (?,?,?);"
with cursor.execute(tsql,Atd_Date,Atd_InTime,SID):
print ('Successfuly Inserted!')
不幸的是,它无法按预期工作。我真的不能从串行中获取输出并将其推送到MSSQL。我也收到了这个错误:
第20行,在 Atd_Date = ast.literal_eval(data)['Date'] node_or_string = parse(node_or_string,mode ='eval')