在python中获取串口输出

问题描述 投票:0回答:1

我是Python的新手。我有一个python代码,我的目标是获取串行输出,然后将输出存储到Microsoft SQL数据库。

每次学生扫描指纹考勤时都会出现下面的串行输出,这就是Arduino串口监视器在屏幕上显示的内容:

{'SID':1,'Date':2018/11/17,'Time':07:11:13}
{'SID':2,'Date':2018/11/17,'Time':07:15:41}
....
....

我想让我的python代码完成这项工作,即获取上面的串行输出并存储到Microsoft SQL数据库中。当学生扫描指纹以便考勤时,python应该能够获取串行输出并将其每次存储到MSSQL中。我是这样做的:

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()
now = datetime.datetime.now()
arduino = serial.Serial('COM4', 9600, timeout=.1) 

while True:
        data = arduino.readline()[:-2].decode("utf-8") 
        if data!="":
                SID = ast.literal_eval(data)['SID']
                Atd_Date = ast.literal_eval(data)['Date']
                Atd_InTime = ast.literal_eval(data)['Time']

        print ('Inserting a new row into table')
        tsql = "INSERT INTO attendance (Atd_Date, Atd_InTime, SID) VALUES (?,?,?);"
        with cursor.execute(tsql,Atd_Date,Atd_InTime,SID):
                print ('Successfuly Inserted!')

但是,我做不到。上面的python代码并没有按预期工作。我也得到了这个错误:

with cursor.execute(tsql,Atd_Date,Atd_InTime,SID):NameError:name'Atd_Date'未定义

python sql-server serial-port sql-server-2017
1个回答
0
投票

您需要将autocommit设置为true,或者在执行游标后提交更改...

© www.soinside.com 2019 - 2024. All rights reserved.