首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用odo和SQLAlchemy将CSV加载到MySQL

用odo和SQLAlchemy将CSV加载到MySQL
EN

Stack Overflow用户
提问于 2016-12-05 04:50:03
回答 1查看 2.1K关注 0票数 3

我使用odo将CSV文件写入MySQL表。

代码语言:javascript
复制
uri = 'mysql+pymysql://username:password@database/schema::table'
odo('data.csv', uri)

当我不指定数据时,MySQL表将以所有字符串列作为文本,所有整数列作为BIGINT(20)。因此,我尝试了以下数据,并得到了下面的错误:

代码语言:javascript
复制
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指定。

代码语言:javascript
复制
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数据类型

EN

回答 1

Stack Overflow用户

发布于 2016-12-05 05:04:41

你可以试着用熊猫和金炼金术来达到同样的目的。

代码语言:javascript
复制
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中。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40967284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档