Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将datetime.date写入到“”时出错_Python_Sql_Sql Server_Pandas - Fatal编程技术网

Python 将datetime.date写入到“”时出错

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

我正在使用最新的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 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的所有列一样)。因此,您会收到上述错误消息。
现在一个可能的解决方案是自己创建数据库,然后将数据帧附加到数据库中