使用Python连接Arduino和MSSQL

时间:2018-11-18 15:08:44

标签: python sql-server

我是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')

这两个网站12与我的情况相似。我做对了吗?

0 个答案:

没有答案