首页 > 解决方案 > 有没有办法使用 SQLAlchemy 将列数据类型自动加载到 SQLite 中?

问题描述

我有一个包含近 100 列的大型 csv 文件,其中包含不同的数据类型,我想使用 sqlalchemy 将其加载到 sqlite 数据库中。这将是一个持续的事情,我将定期将新数据加载为数据库中的新表。这似乎应该是微不足道的,但我无法得到任何工作。

到目前为止,我查看的所有解决方案都在创建表时明确定义了列。

这是我目前拥有的一个最小示例(列少得多)。

from sqlalchemy import *
import pandas as pd

values_list = []
url = r"https://raw.githubusercontent.com/amanthedorkknight/fifa18-all-player-statistics/master/2019/data.csv"
df = pd.read_csv(url,sep=",")   
df = df.to_dict()
metadata = MetaData()
engine = create_engine("sqlite:///" + r"C:\Users\...\example.db")
connection = engine.connect()
# I would like define just the primary key column and the others be automatically loaded...
t1 = Table('t1', metadata, Column('ID',Integer,primary_key=True))
metadata.create_all(engine)
stmt = insert(t1).values()
values_list.append(df)
results = connection.execute(stmt, values_list)
values_list = []
connection.close()

标签: pythonsqlitesqlalchemy

解决方案


感谢您的建议。经过一段时间的搜索,一个不错的解决方案是使用 sqlathanor 包。有一个名为 generate-model-from-csv 的函数,它允许您读取 csv(也可用于字典、json 等)并直接构建 sqlalchemy 模型。它在数据类型识别方面并不完美,但如果您有很多列,肯定会为您节省一些时间。

https://sqlathanor.readthedocs.io/en/latest/api.html#generate-model-from-csv


推荐阅读