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 が 63 ではなく varchar(255) でテーブルを作成するようにするにはどうすればよいですか?

4

1 に答える 1

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 TEXTsql 型が使用されるため、テキスト列は切り捨てられません。これを特定の長さの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

于 2015-03-30T07:48:01.180 に答える