我使用df.to_sql(con=con_mysql, name='testdata', if_exists='replace', flavor='mysql')
将数据帧导出到mysql中。但是,我发现具有长字符串内容(如url)的列被截断为63位。我在导出时收到来自ipython notebook的以下警告:
/usr/local/lib/python2.7/site-packages/pandas/io/sql.py:248: Warning: Data truncated for column 'url' at row 3 cur.executemany(insert_query, data)
对于不同的行,有相同样式的其他警告。在
有什么我可以调整以正确地导出完整的数据吗?我可以在mysql中设置正确的数据模式,然后导出到该模式。但我希望一个调整可以让它直接从python中运行。在
如果您使用的是pandas0.13.1或更老版本,63位数字的限制确实是硬编码的,因为代码中有这一行:https://github.com/pydata/pandas/blob/v0.13.1/pandas/io/sql.py#L278
作为解决方法,您可以使用monkeypatch函数
get_sqltype
:然后只要使用你的代码就可以了:
^{pr2}$从pandas0.14开始,sql模块在幕后使用sqlalchemy,字符串被转换为sqlalchemy
TEXT
类型,并转换为mysqlTEXT
类型(而不是VARCHAR
),这也允许您存储大于63位数的字符串:只有当您仍然使用DBAPI连接而不是sqlalchemy引擎时,问题仍然存在,但是不推荐使用此选项,建议为
to_sql
提供sqlalchemy引擎。在受到@joris答案的启发,我决定将更改硬编码到panda的源代码中并重新编译。在
更改行
^{pr2}$871
到
然后重新编译这个文件
sudo python -m py_compile sql.py
重新启动脚本,
_to_sql()
函数编写了一个表。 (我原以为重新编译会破坏熊猫,但似乎没有。)下面是我写一个mysql数据帧的脚本,供参考。在
相关问题 更多 >
编程相关推荐