使用 pandas.to_sql() 编写 datetime.datetime() 列

cps*_*pek 5 python datetime sqlalchemy sqldatatypes pandas

我有一列数据帧df具有列TS其中

In [1]: type(df.TS.values[0])
Out[1]: pandas.tslib.Timestamp
Run Code Online (Sandbox Code Playgroud)

我将列转换为类型 datetime.datetime()

In [2]: import datetime
In [3]: df['TS'] = df['TS'].astype(datetime.datetime)
Run Code Online (Sandbox Code Playgroud)

我想将此数据框写入 mssql 2008 数据库中的表,使用pd.to_sql(). 所以,我运行以下。

In [4]: coltype = {'TS': sqlalchemy.TIMESTAMP}

In [5]: df.to_sql(name='Table', con=engine, if_exists='append', index=False, dtype=coltype)
Out[5]: ValueError: df (<class 'sqlalchemy.sql.sqltypes.TIMESTAMP'>) not a string
Run Code Online (Sandbox Code Playgroud)

我也试过不将列转换为datetime.datetime()并得到相同的错误。我查看了sqlalchemy有关列类型的文档,但无法弄清楚应该传递什么参数。有人能帮我理解我应该传递什么来将列作为日期时间对象写入数据库吗?

Gon*_*ica 0

正如@joris所说

您不需要自己指定数据类型(支持日期时间值)。

所以,删除dtype=coltype应该可以解决你的问题

df.to_sql(name='Table', con=engine, if_exists='append', index=False) 
Run Code Online (Sandbox Code Playgroud)

dtype对于缺少值的整数很有用。

要注意:

虽然 pandas 被迫将数据存储为浮点数,但数据库支持可为空的整数。当使用 Python 获取数据时,我们返回整数标量。来源