我正在与许多托管在AWS S3桶中的CSV一起工作,它们有许多不同的原理图(例如,一个CSV可能有标题'Name‘、’身高‘、’体重‘,还有一个可能有标题'Name’、‘道布’、'Sex')。
我有一个AWS MySQL Sex无数据库实例,在它上有一个包含模式的数据库表(例如,使用上面的例子,它的模式可能是'Name‘、’身高‘、’体重‘、’道布‘、’性别‘)。
我编写了一个函数,它连接到数据库,作为一个列表获取相关表的架构,从S3连接到给定的CSV,获取它的头作为一个列表,并将它们进行比较,如果CSV头不是数据库模式的子集,则抛出一个异常。我现在正试图编写代码,说明CSV头是数据库模式的一个子集,在这种情况下,CSV可以安全地加载到数据库中。
是否有一个工具来加载CSV,以便将其头自动匹配到数据库中的相应列并相应地填充行?例如(虽然这似乎是一种不必要的资源消耗解决方案),如果我将CSV加载到一个熊猫DataFrame中,然后尝试将其加载到数据库中,那么列名会自动匹配吗?如果是这样的话,下面的代码会是什么样子呢?
...
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()
...发布于 2019-10-17 04:47:14
你想要名字匹配吗?当它们匹配时,您想要每个csv中的一行在表中总共创建一行吗?
那么最好是
CREATE TABLE并在加载数据上拼写出合适的参数之后),INSERT INTO .. (...) SELECT ... JOIN ...)如果其中任何一行都可能缺少行(名称),则需要一个FULL OUTER JOIN。MySQL没有这样的功能,但可以进行模拟。或者,步骤3可以在多个步骤中完成。
发布于 2019-11-30 01:44:19
作为后续,我在DataFrame上使用了Pandas方法to_sql(),它会自动匹配列名。
https://stackoverflow.com/questions/58424896
复制相似问题