什么 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()
我有一段代码试图将 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()