python - 在 .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
我似乎无法弄清楚这一点。
解决方案
由于程序将始终创建cities
表,因此应修改 CREATE 查询以包含任何其他列。
在 INSERT 上,如果 ROWID 或 INTEGER PRIMARY KEY 列没有显式地给定一个值,那么它将用一个未使用的整数自动填充,通常比当前使用的最大 ROWID 多一个。无论是否使用 AUTOINCREMENT 关键字,这都是正确的。
底线,Name_id
需要将列添加到 CREATE 表查询并从 INSERT 查询中删除。
仅供参考,同一文档还指出:
AUTOINCREMENT 关键字强加了额外的 CPU、内存、磁盘空间和磁盘 I/O 开销,如果不是严格需要,应避免使用。通常不需要它。
推荐阅读
- css - 如何在 Twitter Bootstrap 中实现“拖出菜单”?
- php - PHP以奇怪的方式计算
- asp.net-mvc-5.2 - 从 ReturnUrl 返回 MVC 5 中的 QueryString
- excel - 在 Excel 中使用 IF 数组
- excel - 在两列数据中查找匹配项
- rabbitmq - RabbitMQ:检查发布者的队列大小
- node.js - 是否有用于访问给定部署的云功能的版本号的变量
- c# - 如何组合音频和视频轨道进行播放或从 Web 获取 StorageFile?
- json - 嵌套模板的 JsonToken EndObject 错误
- java - spring data中如何使用自定义数据库方言?