私はPython 2.7をAnacondaパッケージマネージャで実行しています。 pandas.to_sqlコマンドが発生しました識別子が長すぎますエラーです。pandas to_sqlが「識別子の名前が長すぎます」というエラーを発生させます
エラーが発生したコードの行:
def write_to_sql(self, pdata):
pdata.to_sql(self._tblname, self._db.get_connection(), flavor = 'mysql',
if_exists='replace', index = True, index_label = [COLUMN_ALLIANCERANK, COLUMN_ALLIANCEID,
COLUMN_ALLIANCENAME, COLUMN_PLAYERID, COLUMN_NICK, COLUMN_LASTUPDATED])
PDATAは、次の形式である入力データフレーム。最後の数値フィールド(101,102 ...)を除くすべてがデータフレーム内のインデックスです。以下は
COLUMN_ALLIANCERANK ... COLUMN_LASTUPDATED
value a1 ... value x1 101
value a2 ... value x2 102
エラーダンプ(関連する部分のみ)インターネットフォーラムで見上げる
Traceback (most recent call last):
... ...
File "D:\Workspace\python\lnk\datasourceActivityTrackerChange.py", line 92, in write_to_sql
COLUMN_ALLIANCENAME, COLUMN_PLAYERID, COLUMN_NICK, COLUMN_LASTUPDATED])
File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 1003, in to_sql
dtype=dtype)
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 569, in to_sql
chunksize=chunksize, dtype=dtype)
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 1633, in to_sql
table.create()
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 690, in create
self._execute_create()
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 1400, in _execute_create
conn.execute(stmt)
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 205, in execute
self.errorhandler(self, exc, value)
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1059, "Identifier name 'ix_tbl_us3_activity_tracker_allianceRank_allianceId_allianceName_playerID_nick_lastUpdated' is too
long")
であるMySQLが64文字以下にする識別子を制限ように、それはそうです。だから、'replace'
の代わりにif_exists = 'append'
を使用し、mysqlにテーブルを直接作成して、to_sql引数のテーブル名やプライマリ/外部キーを減らしました。しかし、これは私の柔軟性を大幅に制限しているだけでなく、これらのエラーを避けるためにJSONファイルにデータの一部を格納することも必要以上に大変です。
私の質問は、私はif_exists = 'replace'
を使用することができますが、MySQLの識別子の< 64文字の要件に適合するために、短いテーブル/カラム名を使用するように制限されていない別の方法がある
1ですか?
2.これを達成するより良い方法がある場合は、教えてください。
ありがとうございます。それは良い考えです。私は自分自身を作成するためにそのファイルコードを使用します。あなたはこれまでにそれを試したことがありますか? mysqlを使っていないのであれば、Pythonライブラリのコードをとり、あなた自身のためにカスタムバージョンを作成した別のものかもしれません。 私はplot.lyソースファイルを使って一度しか作っていませんが、pythonソースファイルをカスタマイズするためのヒント/ dos/dontsがあるかどうか疑問に思っています(もちろん私のローカルコピーを作成し、 – schywalker