1

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

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

4

1 回答 1

3

假设您使用的是 pandas >= 0.14 的版本,您应该使用sqlalchemy它来建立数据库连接(不推荐使用 mysql 的 DBAPI 连接,请参阅http://pandas.pydata.org/pandas-docs/stable/io.html #sql 查询):

engine = sqlalchemy.create_engine("mysql+pymysql://....")
df.to_sql('my_tbl_name', engine, if_exists='replace')

这样做时,您的文本列将不会被截断,因为默认使用sqlalchemy TEXTsql 类型。如果要将其更改为具有特定长度的例如VARCHARdtype ,则可以使用参数(但这需要 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

于 2015-03-30T07:48:01.180 回答