私はodoを使ってMySQLテーブルにCSVファイルを書き出しています。odoとSQLAlchemyを使ってMySQLにCSVをロード
uri = 'mysql+pymysql://username:[email protected]/schema::table'
odo('data.csv', uri)
私はdatashapeを指定しない場合は、MySQLのテーブルはBIGINT(20)のようにTEXTとすべての整数の列として、すべての文字列カラムで作成されます。だから、私は次のようdatashapeを試みたが、下のエラーを得た:
dshape = '{} * {{ \
ID: 10 * string, \
FOO: float16, \
URL: 175 * var * string, \
PRICE: uint32, \
BAR: int8, \
}}'.format(num_rows)
uri = 'mysql+pymysql://username:[email protected]/schema::table'
odo('data.csv', uri, dshape=dshape)
理想的
NotImplementedError: No SQLAlchemy dtype match for datashape: var
NotImplementedError: No SQLAlchemy dtype match for datashape: float16
NotImplementedError: No SQLAlchemy dtype match for datashape: uint32
NotImplementedError: No SQLAlchemy dtype match for datashape: int8
が、私はTINYINTにVARCHAR(175)に、175 * VAR *文字列のマップをINT8マップを持ってすることができるだろう、と10 * stringはCHAR(10)にマップされますが、SQLAlchemyはこれをサポートしていません。私はすべてのデータ型を確定してint32またはfloat32に設定し、私は文字列型からvar指定を削除しました。
dshape = '{} * {{ \
ID: 10 * string, \
FOO: float32, \
URL: 175 * string, \
PRICE: int32, \
BAR: int32, \
}}'.format(num_rows)
uri = 'mysql+pymysql://username:[email protected]/schema::table'
odo('data.csv', uri, dshape=dshape)
これは、int32をINT(11)に、float32をDOUBLEにマップします。私はこれで生きることができます。しかし、私の文字列はすべてMySQL上でTEXTとして書かれているということを受け入れることはできません。
MySQLでCHARデータ型とVARCHARデータ型を取得するには、datashapeをどのように変更する必要がありますか?
私はパンダを使用して開始しました非常に非効率的であることが判明しました。この記事では、MySQLにCSVをロードするためにパンダを使用しない理由を説明します:http://odo.pydata.org/en/latest/perf.htmlできるならば、私はそのオプションを避けています。 – Raddfood