什么 python 对象类型与 ms-access date/time 字段兼容?

What python object-type is compatible with the ms-access date/time field?

我有一段代码试图将 datetime.datetime 插入到 ms-access 数据库的 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)')

但是好像不行

虽然原题没有具体说明变量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

现在可以将其解析到数据库中(或更改为有效的格式)。

您直接将日期时间对象的 name 作为引号文字包含在 SQL 语句中。因此,Access 会引发错误,因为您正试图将文字字符串值 'timeCET.timedate'name 而不是实际日期时间变量的值)插入日期时间列。

相反,请考虑 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()