Python 将datetime.date写入到“”时出错
我正在使用最新的pandas 14.1并使用to_sql方法写入MS sql Server 2008 v2服务器。使用SQLalchemy作为引擎。以下带有datetime对象的dataframe按预期工作Python 将datetime.date写入到“”时出错,python,sql,sql-server,pandas,Python,Sql,Sql Server,Pandas,我正在使用最新的pandas 14.1并使用to_sql方法写入MS sql Server 2008 v2服务器。使用SQLalchemy作为引擎。以下带有datetime对象的dataframe按预期工作 #test DataFrame df1 = pd.DataFrame(index=range(10)) df1['A'] = 'Text' df1['date_test'] = datetime.datetime(2014,1,1) 用于写入数据库的代码: import sqlalchem
#test DataFrame
df1 = pd.DataFrame(index=range(10))
df1['A'] = 'Text'
df1['date_test'] = datetime.datetime(2014,1,1)
用于写入数据库的代码:
import sqlalchemy
engine = sqlalchemy.create_engine('mssql+pymssql://XXXXXXX')
df1.to_sql('test', engine, if_exists='replace')
出于业务原因,数据库中的数据必须是日期对象,而不是日期时间。如果我使用:
#test DataFrame
df2 = pd.DataFrame(index=range(10))
df2['A'] = 'Text'
df2['date_test'] = datetime.date(2014,1,1) # date not datetime
to_sql方法会给出很长的错误消息:
OperationalError: (OperationalError) (206, 'Operand type clash: datetime is incompatible
with textDB-Lib error message 206, severity 16:\nGeneral SQL Server error:
Check messages from the SQL Server.......
我的第一个怀疑是,如果在方法中使用日期,这可能是Pandas 14.1中新创建的功能的一个bug。但不确定。更新:从pandas 0.15开始,
到_sql
支持写入datetime.date
和datetime.time
(现在处于开发版本)列
目前(0.14.1)尚未实现对
datetime.date
和datetime.time
类型的支持(仅适用于datetime64
类型,并且datetime.datetime
将转换为该类型),但添加该类型应该很容易(存在一个问题:)
问题是,目前,to_sql
在数据库中为datetime.date
列创建了一个文本类型的列(与object
dtype的所有列一样)。因此,您会收到上述错误消息。现在一个可能的解决方案是自己创建数据库,然后将数据帧附加到数据库中