DU = []
for i in range(len(DD)):
DU += [DD[i]+' '+UU[i]]
dtDate = []
for i in range(len(DU)):
dtDate = dtDate + [time.strptime(DU[i],"%d.%m.%Y %H:%M:%S")]
#readin access
path = './'
acc_fname = 'test.mdb'
DRV = '{Microsoft Access Driver (*.mdb, *.accdb)}'
MDB = path + acc_fname
PWD = ''
con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))
cur = con.cursor()
for i in range(3):
SQL = 'SELECT ID FROM Tab WHERE Tab.FileZeit = {0};'.format(dtDate[i])
table_2 = cur.execute(SQL).fetchall()
print(table_2)
然后我收到了这个错误:
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC-Treiber f\ufffdr Microsoft Access] Undefined function 'time.struct_time' in Ausdruck. (-3102) (SQLExecDirectW)")
DD& UU是带有日期和时间的列表,然后我将它们转换为datetime(dtDate)。 Filezeit也是日期时间类型。
答案 0 :(得分:0)
好吧,你的数据库无法处理time.struct_time,尝试使用SQL =' SELECT ID FROM Tab WHERE Tab.FileZeit = {0};' .format将其更改回字符串(time.strftime(dtDate [i],"%d。%m。%Y%H:%M:%S"))
修改强>
SQL =' SELECT ID FROM Tab WHERE Tab.FileZeit =%s' %time.strftime("%d。%m。%Y%H:%M:%S",dtDate [i]))
答案 1 :(得分:0)
对SQL查询使用parameters而不是字符串格式。向查询添加参数占位符(?
),并在调用Cursor.execute时为该参数提供值。
con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))
cur = con.cursor()
for i in range(3):
params = (dtDate[i],)
SQL = 'SELECT ID FROM Tab WHERE Tab.FileZeit = ?;'
table_2 = cur.execute(SQL, params).fetchall()
使用datetime
值时,这有一个额外的好处,就是让pyodbc处理Python datetime类型到ODBC类型的转换,不需要字符串格式化。