我在代码中有以下行,效果很好!
df.to_sql(con=connection, name='my_tbl_name', if_exists='replace', flavor='mysql')
但问题是它使用varchar(63)创建列,并且数据长度超过63个字节。
我收到了这个警告:
/home/anaconda/lib/python2.7/site-packages/pymysql/cursors.py:134: Warning: Data truncated for column '2' at row 1
result = self._query(query)
如何确保pandas创建一个包含varchar(255)而不是63?
的表答案 0 :(得分:3)
假设您使用的是pandas> = 0.14的版本,您应该使用sqlalchemy
来建立数据库连接(不推荐使用mysql的DBAPI连接,请参阅http://pandas.pydata.org/pandas-docs/stable/io.html#sql-queries):
engine = sqlalchemy.create_engine("mysql+pymysql://....")
df.to_sql('my_tbl_name', engine, if_exists='replace')
执行此操作时,您的文本列不会被截断,因为默认使用sqlalchemy TEXT
sql type。如果要将此更改为例如VARCHAR且具有一定长度,则可以使用dtype
参数(但这需要pandas 0.16):
from sqlalchemy.types import VARCHAR
df.to_sql('my_tbl_name', engine, dtype={'Col_2': VARCHAR(256)})
当您使用旧版本的pandas时,或者出于某种原因无法使用sqlalchemy时,您可以看到此答案的解决方法:pandas to_sql truncates my data