首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将CSV标头与MySQL架构列匹配

将CSV标头与MySQL架构列匹配
EN

Stack Overflow用户
提问于 2019-10-17 04:24:26
回答 2查看 475关注 0票数 0

我正在与许多托管在AWS S3桶中的CSV一起工作,它们有许多不同的原理图(例如,一个CSV可能有标题'Name‘、’身高‘、’体重‘,还有一个可能有标题'Name’、‘道布’、'Sex')。

我有一个AWS MySQL Sex无数据库实例,在它上有一个包含模式的数据库表(例如,使用上面的例子,它的模式可能是'Name‘、’身高‘、’体重‘、’道布‘、’性别‘)。

我编写了一个函数,它连接到数据库,作为一个列表获取相关表的架构,从S3连接到给定的CSV,获取它的头作为一个列表,并将它们进行比较,如果CSV头不是数据库模式的子集,则抛出一个异常。我现在正试图编写代码,说明CSV头是数据库模式的一个子集,在这种情况下,CSV可以安全地加载到数据库中。

是否有一个工具来加载CSV,以便将其头自动匹配到数据库中的相应列并相应地填充行?例如(虽然这似乎是一种不必要的资源消耗解决方案),如果我将CSV加载到一个熊猫DataFrame中,然后尝试将其加载到数据库中,那么列名会自动匹配吗?如果是这样的话,下面的代码会是什么样子呢?

代码语言:javascript
运行
复制
...
if not set(cols).issubset(schema):
        raise Exception('CSV columns are not subset of schema (see above). Please reconfigure schema or column names and retry.')
    else:
        with conn.cursor() as cur:
            * CODE TO LOAD CSV TO DB WITH AUTOMATIC COLUMN-TO-SCHEMA MATCHING *
            conn.commit()
...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-17 04:47:14

你想要名字匹配吗?当它们匹配时,您想要每个csv中的一行在表中总共创建一行吗?

那么最好是

  1. 将数据从一个csv加载到一个表中(在执行CREATE TABLE并在加载数据上拼写出合适的参数之后),
  2. 将数据从另一个csv加载到另一个表(.
  3. 将这两个表的连接插入到最后一个表中。(INSERT INTO .. (...) SELECT ... JOIN ...)

如果其中任何一行都可能缺少行(名称),则需要一个FULL OUTER JOIN。MySQL没有这样的功能,但可以进行模拟。或者,步骤3可以在多个步骤中完成。

票数 0
EN

Stack Overflow用户

发布于 2019-11-30 01:44:19

作为后续,我在DataFrame上使用了Pandas方法to_sql(),它会自动匹配列名。

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

https://stackoverflow.com/questions/58424896

复制
相关文章

相似问题

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