问题
I am trying to populate Pandas Dataframe into empty MS Access 2016 table via pyodbc. I get the following error message when I try to insert Dataframes into Access: pyodbc.dataerror: ('22008', [ODBC Microsoft Access Driver]Datetime field overflow.
Research showed that MS Access Date/Time datatypes correspond to ODBC SQL_TIMESTAMP datatypes.
I tried the following to convert datetime64[ns] to SQL_TIMESTAMP:
import datetime
cursor.execute("INSERT sql statement...VALUES(?)", datetime.datetime(order_date))
However, I get this error: TypeError: an integer is required (got type Timestamp).
What do I need to do in order to successfully populate Pandas/Numpy's datetime64[ns] values into Access tables? Do I need to convert them into SQL_TIMESTAMP and how?
EDIT: I tried running Gord Thompson's solution below and I am running into this error:
import datetime
dt = dt64_to_datetime(dt_ns)
>> AttributeError:'datetime' has no attribute 'utcfromtimestamp'
What is the reason behind this error? (Tested on pyodbc 4.0.17, Python 3.6.2, MS Access 2016)
回答1:
What do I need to do in order to successfully populate Pandas/Numpy's datetime64[ns] values into Access tables? Do I need to convert them into SQL_TIMESTAMP and how?
As illustrated in this excellent answer, you'll probably need to convert the numpy.datetime64
values to Python datetime
values, perhaps like this:
def dt64_to_datetime(dt64):
if np.isnat(dt64):
return None
else:
unix_epoch = np.datetime64(0, 's')
one_second = np.timedelta64(1, 's')
seconds_since_epoch = (dt64 - unix_epoch) / one_second
return datetime.utcfromtimestamp(seconds_since_epoch)
Example usage:
dt_ns = np.datetime64('2017-10-24 05:34:20.123456').astype('datetime64[ns]')
print(repr(dt_ns)) # numpy.datetime64('2017-10-24T05:34:20.123456000')
print(f'dt_ns.dtype: {dt_ns.dtype}') # dt_ns.dtype: datetime64[ns]
dt = dt64_to_datetime(dt_ns)
print(repr(dt)) # datetime.datetime(2017, 10, 24, 5, 34, 20, 123456)
sql = "UPDATE tablename SET datetimefield = ? WHERE id=1"
params = (dt,)
crsr.execute(sql, params)
(Tested with pyodbc 4.0.21 and Access 2010.)
来源:https://stackoverflow.com/questions/47643804/how-to-convert-pandas-dataframe-column-from-pandas-datetime64ns-to-pyodbc-sql