我正试图用以下脚本将当前时间存储在我的访问数据库中:
import pyodbc
import time
connStr = """
DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};
DBQ=C:/Users/QPCS Registration/Documents/DB Tests/PYODBC.accdb;
"""
cnxn = pyodbc.connect(connStr)
cursor = cnxn.cursor()
def TimeStamp():
RFID = str(input("Please tap your pass on the reader:n"))
Current_Time = str(time.strftime("%H:%M"))
cursor.execute('INSERT INTO Time_Of_Entry(RFID_Number,Time_Tapped) VALUES('+RFID+','+Current_Time+');')
cnxn.commit()
def Close_DB_Cnxn():
cnxn.close()
TimeStamp()
Close_DB_Cnxn()
当我运行它时,我得到以下错误:
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '19:44'. (-3100) (SQLExecDirectW)")
问题肯定出在"Current_Time"上,因为当我尝试用下面显示的脚本存储变量"RFID"时,它会很好地插入数据库。
cursor.execute('INSERT INTO Time_Of_Entry(RFID_Number) VALUES('+RFID+');')
我尝试将表"Time_of_Entry"中字段"Time_Tapped"的数据类型从Short Text更改为Date/Time;时间很短,但没有效果。
我的机器在windows7家庭高级64位上运行。我有微软office 2010;32位我正在运行python 3.3;32位
以下示例适用于我:
from datetime import datetime, time
import pypyodbc
rfid = "GORD123" ## for testing
now = datetime.now()
currentTime = datetime(1899, 12, 30, now.hour, now.minute)
connStr = """
Driver={Microsoft Access Driver (*.mdb, *.accdb)};
Dbq=C:/Users/Public/Database1.accdb;
"""
cnxn = pypyodbc.connect(connStr)
cursor = cnxn.cursor()
sql = """
INSERT INTO Time_Of_Entry (RFID_Number, Time_Tapped) VALUES (?, ?)
"""
parameters = (rfid, currentTime)
cursor.execute(sql, parameters)
cursor.close()
cnxn.commit()
cnxn.close()
注:
我使用pyodybc而不是pyodybc,因为我使用的是Python 3.4.3,而最新的Windows pyodybc安装程序在找不到Python 3.3时被卡住了。为了得到pypyodbc,我所要做的就是运行
pip install pypyodbc
。Access中的所有日期/时间值都包含日期和时间组件。为了使的日期/时间值在Access中默认显示为时间,我们需要将其指定为"神奇"日期1899-12-30。(这是Access中
CDate(0)
对应的日期。)