【发布时间】:2015-10-13 12:04:00
【问题描述】:
对象df 的类型是pandas.core.frame.DataFrame。
In [1]: type(df)
Out[1]: pandas.core.frame.DataFrame
df 的索引是一个 DatetimeIndex
In [2]: type(df.index)
Out[2]: pandas.tseries.index.DatetimeIndex
con 提供了一个有效的 MySQLdb 连接
In [3]: type(con)
Out[3]: MySQLdb.connections.Connection
我无法将此数据框正确输入到 MySQL 数据库中,具体来说,日期字段在使用以下内容时显示为空(以及对此的一些变体)。
df.to_sql( name='existing_table',con=con, if_exists='append', index=True, index_label='date', flavor='mysql', dtype={'date': datetime.date})
将这个数据框正确输入到本地 MySQL 数据库中需要哪些步骤,并在数据库中使用“日期”作为日期字段?
【问题讨论】:
-
这是一个长镜头,这就是为什么我要写评论而不是答案,但如果你使用
dtype={'date': datetime.datetime}而不是dtype={'date': datetime.date},它是否有效?如果没有,它只是将null插入到数据库中还是会引发错误?此外,通过阅读to_sql此处的文档:pandas.pydata.org/pandas-docs/stable/generated/…,dtype似乎是可选的,但如果存在,我相信它应该包含所有列。 -
进行了更改,但它仍然只是输入空值。两种情况都不会报错
-
纯 MySQLdb 连接不支持写入数据库。您必须将该连接包装在 SQLAlchemy 引擎中(pandas 将其用于数据库风格的特定差异)。对于普通的 DBAPI 连接,仅支持 sqlite。见pandas.pydata.org/pandas-docs/stable/io.html#io-sql
-
另外,你用的是什么版本的熊猫?
-
您必须将您的 pandas 版本至少升级到 0.15 才能将日期正确写入 MySQL 数据库。使用这个旧版本,您确实可以使用 MySQLdb 连接,但没有正确处理日期时间类型。较新的 pandas 版本通过使用 SQLAlchemy 改进了支持(请参阅我之前的评论)。
标签: python mysql pandas mysql-python