我有一段代码试图将datetime.datetime
插入ms访问日期库的date/time
(而不是extended date/time
(字段,但我一直收到数据类型不匹配的错误消息。所以我的问题是,我应该使用哪种类型?
我试着使用这个代码
print(type(timeCET))
>>>
datetime.datetime
和
crsr.execute("insert into WeatherAnalisis(Time_UTC) values ('timeCET.timedate')")
cnxn.commit()
>>>>
pyodbc.DataError: ('22018', '[22018] [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression. (-3030) (SQLExecDirectW)')
但似乎不起作用
您直接将datetime对象的名称作为带引号的文字包含在SQL语句中。因此,Access会抛出一个错误,因为您正试图将文本字符串值'timeCET.timedate'
(名称,而不是实际日期时间变量的值(插入到日期时间列中。
相反,请考虑SQL参数化。(不要连接,因为在Access SQL中,单引号无法将日期括起来(。
# PREPARED STATEMENT WITH QMARK
sql = "insert into WeatherAnalisis (Time_UTC) values (?)"
# EXECUTE QUERY WITH BINDED PARAM
crsr.execute(sql, timeCET)
cnxn.commit()
虽然最初的问题没有指定变量timeCET
的来源,但一旦可以从其类型中看出它是datetime
。
问题似乎出在matching types
上。
鉴于此,以下是如何转换为字符串:
import datetime as dt
# create a datetime
t = dt.datetime.utcnow()
print(t)
print(type(t))
# now convert to string
u = t.strftime("%m/%d/%Y, %H:%M:%S")
print(u)
print(type(u))
这是输出:
2022-03-26 17:00:52.998699
<class 'datetime.datetime'>
03/26/2022, 17:00:52
<class 'str'>
变量t
的原始类型为datetime
。
现在(对于变量u
(更改为string
。
现在可以将其解析到数据库中(或更改为有效的格式(。