首页 > 解决方案 > 在 .CSV 数据导入中添加自动递增主键字段

问题描述

import sqlite3
import csv

current_ID = 1

conn = sqlite3.connect("cities.sqlite")
cur = conn.cursor()

cur.execute("DROP TABLE IF EXISTS cities")
cur.execute('''
CREATE TABLE "cities" (
"City_Name" TEXT,
"Population" INTEGER
)
''')

fname="city.csv"

with open(fname) as csv_file:
    csv_reader = csv.reader(csv_file,delimiter=',')
    for row in csv_reader:
        print(row)
        City_Name = row[0]
        Population = row[1]
        cur.execute('''INSERT INTO cities(Name_id,City_Name,Population)
VALUES(?,?)''', (City_Name, Population))
conn.commit()

当我导入这两列时,有人可以帮我在我的 SQL 表中添加一个新列吗?文件中只有两列数据,我想添加第三列,带有一个自动递增的 ID

我似乎无法弄清楚这一点。

标签: pythondatabasesqliteimport

解决方案


由于程序将始终创建cities表,因此应修改 CREATE 查询以包含任何其他列。

SQLITE Autoincement 页面

在 INSERT 上,如果 ROWID 或 INTEGER PRIMARY KEY 列没有显式地给定一个值,那么它将用一个未使用的整数自动填充,通常比当前使用的最大 ROWID 多一个。无论是否使用 AUTOINCREMENT 关键字,这都是正确的。

底线,Name_id需要将列添加到 CREATE 表查询并从 INSERT 查询中删除。

仅供参考,同一文档还指出:

AUTOINCREMENT 关键字强加了额外的 CPU、内存、磁盘空间和磁盘 I/O 开销,如果不是严格需要,应避免使用。通常不需要它。


推荐阅读