在python中获取串行端口输出

时间:2018-11-18 05:25:21

标签: python sql-server serial-port sql-server-2017

我是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代码无法正常工作。我也收到了这个错误:

  

与cursor.execute(tsql,Atd_Date,Atd_InTime,SID):   NameError:名称'Atd_Date'未定义

1 个答案:

答案 0 :(得分:0)

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