【发布时间】:2020-08-30 16:10:21
【问题描述】:
我的脚本运行并且我没有收到任何错误,但我的 students.db 始终为空。 我用于调试的打印命令似乎都打印了 csv 的内容。 我想它可能是插入的,但我找不到它的问题。 下面是我的代码,以及我尝试通过 CS50IDE 查看数据库时看到的内容。 提前感谢您的帮助。
import cs50
import csv
from sys import argv, exit
#if len(argv) != 2:
# print("Usage: python import.py characters.csv")
# exit(1)
# connect to db
db = cs50.SQL("sqlite:///students.db")
# iterate through the csv file
with open("characters.csv", "r") as file:
reader = csv.DictReader(file)
for row in reader:
middle = ""
names = row["name"].split()
firstname = names[0]
if len(names) == 2:
middle = ""
lastname = names[1]
else:
middle = names[1]
lastname = names[2]
house = row["house"]
birth = row["birth"]
print(firstname)
print(middle)
print(lastname)
print(row["house"])
print(row["birth"])
db.execute("INSERT INTO students (first, middle, last, house, birth) VALUES(?, ?, ?, ?, ?)", firstname, middle, lastname, house, birth)
尝试在 IDE 中查看数据库
~/pset7/houses/ $ sqlite3 students.db
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite> .schema
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
first VARCHAR(255),
middle VARCHAR(255),
last VARCHAR(255),
house VARCHAR(10),
birth INTEGER
);
CREATE TABLE sqlite_sequence(name,seq);
sqlite> select * from students
...>
【问题讨论】:
-
我对 cs50 模块不熟悉,但也许在循环完成后尝试
db.commit()。 -
澄清一下:
SELECT * from students;不返回任何行? (cs50.execute 方法提交数据) -
没错,没有行。我按回车键,我得到的只是...>
-
它正在等待另一行输入。与点命令不同,sql 命令需要分号结束符才能执行。