我使用odo将CSV文件写入MySQL表。
uri = 'mysql+pymysql://username:password@database/schema::table'
odo('data.csv', uri)当我不指定数据时,MySQL表将以所有字符串列作为文本,所有整数列作为BIGINT(20)。因此,我尝试了以下数据,并得到了下面的错误:
dshape = '{} * {{ \
ID: 10 * string, \
FOO: float16, \
URL: 175 * var * string, \
PRICE: uint32, \
BAR: int8, \
}}'.format(num_rows)
uri = 'mysql+pymysql://username:password@database/schema::table'
odo('data.csv', uri, dshape=dshape)NotImplementedError:对datashape: var不匹配SQLAlchemy dtype NotImplementedError:不匹配SQLAlchemy数据类型: float16 NotImplementedError:不匹配SQLAlchemy数据类型: uint32 NotImplementedError:不匹配SQLAlchemy数据类型: int8
理想情况下,我可以让int8映射到TINYINT,175 * var * string映射到VARCHAR(175),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:password@database/schema::table'
odo('data.csv', uri, dshape=dshape)这将int32映射为INT(11),将float32映射为DOUBLE。我能忍受这一切。但我不能接受,我的所有字符串列仍然以文本形式写在MySQL上。
如何更改数据How以获得MySQL?中的CHAR和VARCHAR数据类型
发布于 2016-12-05 05:04:41
你可以试着用熊猫和金炼金术来达到同样的目的。
import pandas as pd
import sqlalchemy
from sqlalchemy import create_engine
engine = create_engine('mysql://username:password@host:port/database', echo=False)
#read csv into Dataframe
df = pd.read_csv('data.csv')
#write csv into Sql
df.to_sql('Table_Name', con=engine, if_exists='replace',index=False)它将读取data.csv文件并将其放入数据库中的Table_Name中。
https://stackoverflow.com/questions/40967284
复制相似问题