将数据框复制到 sql 时列宽不够

column width not sufficient when copying dataframe to sql

我在代码中有以下行,效果很好!

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 创建 table?

假设您使用的是 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 is used by default. If you want to change this to eg 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