1 回答
TA贡献1875条经验 获得超5个赞
解决方案
我能够弄清楚。ON CONFLICT DO NOTHING在使authors.name列唯一后,我使用了 PostgreSQL 的子句。我认为在这个数据结构中不可避免的一个警告是同名作者。我也不确定如何包含由多位作者撰写的书籍。
代码
def main():
f = open("books.csv")
reader = csv.reader(f)
reader.__next__
for isbn, title, author, year in reader:
db.execute("INSERT INTO authors (name) VALUES(:author) ON CONFLICT (name) DO NOTHING",
{"author": author})
db.execute("INSERT INTO books (isbn, title, author, year) VALUES(:isbn, :title, (SELECT author_id FROM authors WHERE name = :author), :year)", {
"isbn": isbn,
"author": author,
"title": title,
"year": year})
db.commit()
输出
author_id | name
-----------+------------------
38 | Raymond E. Feist
book_id | isbn | title | author | year
---------+------------+-----------------------+--------+------
38 | 0380795272 | Krondor: The Betrayal | 38 | 1998
注意:它们共享相同的 ID 是偶然的,因为它们是输入的第一条记录。
添加回答
举报