Datetime 带有有效日期访问插入的日期时间溢出
任何能帮忙的人,谢谢。在使用pyodbc运行INSERT语句时,我遇到了一个非常奇怪的错误。错误代码为:Datetime 带有有效日期访问插入的日期时间溢出,datetime,ms-access,overflow,pyodbc,Datetime,Ms Access,Overflow,Pyodbc,任何能帮忙的人,谢谢。在使用pyodbc运行INSERT语句时,我遇到了一个非常奇怪的错误。错误代码为: cursor.execute(QueryInsert,params) pyodbc.DataError: ('22008', '[22008] [Microsoft][ODBC Microsoft Access Driver]Datetime field overflow (36) (SQLExecDirectW)') 这与日期时间1986-03-28 00:00:00一致 我使用的代
cursor.execute(QueryInsert,params)
pyodbc.DataError: ('22008', '[22008] [Microsoft][ODBC Microsoft Access
Driver]Datetime field overflow (36) (SQLExecDirectW)')
这与日期时间1986-03-28 00:00:00一致
我使用的代码是:
###Necessary Imports
from fredapi import Fred
import pyodbc
import datetime
###Connect to Access Database
conn = pyodbc.connect(r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
+r"DBQ=G:\Financial Modelling\Lease Database v1.0.accdb;")
cursor = conn.cursor()
###3M Libor
SourceCode = 'GBP3MTD156N'
fred = Fred(api_key='insert-api-key')
data = fred.get_series_all_releases(SourceCode)
A = data.shape[0]
###Cycle Through Results
for i in range(1,A):
date1 = data.loc[i,'date']
print(date1)
###execute query at date and only upload if empty
existquery = "SELECT * FROM EconVars WHERE SourceCode = '" + SourceCode + "'
AND ValueDate = " + \
"#"+str(date1.month)+"/"+str(date1.day)+"/"+str(date1.year)+"#"
cursor.execute(existquery)
existData = cursor.fetchall()
###check if empty
if len(existData) == 0:
value1 = data.loc[i,'value']
Description = '3M Libor'
Source1 = 'Fred'
params = (date1,value1,Description,Source1,SourceCode)
QueryInsert = """INSERT into EconVars (ValueDate, ReportedValue,
Description, Source,SourceCode)
Values(?,?,?,?,?)"""
cursor.execute(QueryInsert,params)
cursor.commit()
###Commit Cursor for 3M LIBOR
cursor.commit()
cursor.close()
我使用的access文件中的表有5列
ValueDate定义为日期/时间(短日期)
报告值为数字(双精度)
描述为短文本
源代码为短文本
源代码作为短文本
有没有人以前见过这个错误,或者能够复制它
Python 3.7.2 64位pyodbc 4.0.25 W10 64位和Office 365 64位
感谢所有有想法的人。我发现问题不在于API提供的datetime列 事实上,报告的值应该是一个双精度值,当缺失时,它实际上是“NaT”,我认为它是一个numpy空值或类似的值
Access需要一个双倍值。下面是一个示例,说明如何将datetime字段更改为OP在回答中对我有用的内容(在pandas中): 最初,此字段中的空值是NaT
熊猫文档是否打印(repr(date1))显示
datetime.datetime(1986,3,28,0,0)
?奇怪。对于数值列中的NULL,我希望是NaN
,而不是NaT
。不过,很高兴你把它解决了。
import pandas as pd
df = pd.DataFrame(['01/01/2019',None], columns=['datetime_field'])
df['datetime_field'] = pd.to_datetime(df['datetime_field'])
df['datetime_field'] = pd.to_datetime(df['datetime_field'], errors='coerce').where(df['datetime_field'].notnull(), 0.0)