【发布时间】:2017-12-04 23:42:51
【问题描述】:
我正在尝试通过 pyodbc 将 Pandas Dataframe 填充到 empty MS Access 2016 表中。当我尝试将 Dataframes 插入 Access 时收到以下错误消息:pyodbc.dataerror: ('22008', [ODBC Microsoft Access Driver]Datetime field overflow。
研究表明 MS Access Date/Time 数据类型对应于 ODBC SQL_TIMESTAMP 数据类型。
我尝试了以下方法将 datetime64[ns] 转换为 SQL_TIMESTAMP:
import datetime
cursor.execute("INSERT sql statement...VALUES(?)", datetime.datetime(order_date))
但是,我收到此错误:TypeError: an integer is required (got type Timestamp)。
我需要做什么才能成功地将 Pandas/Numpy 的 datetime64[ns] 值填充到 Access 表中?我是否需要将它们转换为 SQL_TIMESTAMP 以及如何转换?
编辑: 我尝试在下面运行 Gord Thompson 的解决方案,但遇到了这个错误:
import datetime
dt = dt64_to_datetime(dt_ns)
>> AttributeError:'datetime' has no attribute 'utcfromtimestamp'
这个错误背后的原因是什么? (在 pyodbc 4.0.17、Python 3.6.2、MS Access 2016 上测试)
【问题讨论】:
-
请edit你的问题表明你从
print(repr(order_date))和print(order_date.dtype)得到什么。 -
我使用了
from datetime import datetime。如果您只是import datetime,那么您可能需要使用datetime.datetime.utcfromtimestamp。 -
@ Gord Thompson - 我遵循了您的解决方案,但出现以下错误:
OSError: [Errno 22] Invalid argument。我相信这是因为输入值是numpy.datetime64('NaT')。我可以对 NaT 值做些什么?
标签: python dataframe odbc pyodbc ms-access-2016