【问题标题】:How to load a CSV into a sqlite DB using csv headers as table columns using python如何使用 csv 标头作为表列使用 python 将 CSV 加载到 sqlite DB
【发布时间】:2021-07-11 20:32:38
【问题描述】:

我有一个自 1908 年以来所有飞机失事事件的 csv 文件。csv 标题列是,

Date,Time,Location,Operator,Flight #,Route,Type,Registration,cn/In,Aboard,Fatalities,Ground,Summary

我的代码在下面,但这会打印整个文件, 有没有办法使用 CSV 或搁置模块,我可以使用它来制作持久数据库。 这里的最终目标是对数据进行切片和切块, 例如:按日期排序、按年份分组等。

#!/usr/bin/env python3.8
import sqlite3
import csv

conn = sqlite3.connect(":memory:")
cur = conn.cursor()

cur.execute('DROP TABLE IF EXISTS air_disaster')
cur.execute('''
CREATE TABLE "air_disaster" (
    "Date1" TEXT,
    "Time1" TEXT,
    "Location1" TEXT,
    "Operator1" TEXT,
    "Flight_No" TEXT,
    "Route" TEXT,
    "Type1" TEXT,
    "Registration" TEXT,
    "cn" TEXT,
    "Aboard" REAL,
    "Fatalities" REAL,
    "ground" TEXT,
    "Summary" TEXT
)
''')

with  open("/Users/foobar/Downloads/Airplane_Crashes_and_Fatalities_Since_1908.csv") as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader:
 
        Date1 = row["Date"]
        Time1 = row["Time"]
        Location1 = row["Location"]
        Operator1 = row["Operator"]
        Flight_No = row["Flight #"]
        Route = row["Route"]
        Type1 = row["Type"]
        Registration = row["Registration"]
        cn = row["cn/In"]
        Aboard = row["Aboard"]
        Fatalities = row["Fatalities"]
        ground = row["Ground"]
        Summary = row["Summary"]
        cur.execute('''INSERT INTO air_disaster(Date1,Time1,Location1,Operator1,Flight_No,Route,Type1,Registration,cn,Aboard,Fatalities,ground,Summary)
        VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)''', (Date1,Time1,Location1,Operator1,Flight_No,Route,Type1,Registration,cn,Aboard,Fatalities,ground,Summary))
        conn.commit()
    (cur.execute('SELECT * from air_disaster where Fatalities > 1000'))

【问题讨论】:

标签: python sqlite csv shelve


【解决方案1】:

如果您愿意使用 pandas,您可以使用read_csv() 创建一个数据框,然后使用to_sql() 保存到数据库。您还可以获得额外的好处,即在上传数据之前拥有一个用于转换或预处理数据的丰富环境。

【讨论】:

    猜你喜欢
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    相关资源
    最近更新 更多