我正在使用odo將CSV文件寫入MySQL表。使用odo和SQLAlchemy將CSV加載到MySQL
uri = 'mysql+pymysql://username:[email protected]/schema::table'
odo('data.csv', uri)
當我不指定datashape,MySQL表得到的所有字符串列TEXT和所有整列作爲BIGINT(20)創建的。於是,我嘗試了以下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
理想情況下,我能有INT8地圖TINYINT,175 *變種*字符串映射到VARCHAR(175),和例如,10 *字符串映射到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。
我該如何改變我的datashape才能在MySQL中獲取CHAR和VARCHAR數據類型?
我開始使用的大熊貓,但發現它效率很低。這篇文章解釋了爲什麼不使用熊貓將CSV加載到MySQL中:http://odo.pydata.org/en/latest/perf.html所以我會盡量避免使用這個選項。 – Raddfood