当前位置: 首页 > 知识库问答 >
问题:

如何编写python程序将csv数据文件导入关系数据库而不插入重复项

吴康平
2023-03-14
import csv
from cs50 import SQL

open ("shows.db", "w").close()

db = SQL("sqlite:///shows.db")

db.execute("CREATE TABLE shows        (id      INTEGER,      title    TEXT,       PRIMARY KEY(id) )")
db.execute("CREATE TABLE genres       (id      INTEGER,      genre    TEXT,       PRIMARY KEY(id) )")
db.execute("CREATE TABLE shows_genres (show_id INTEGER,      genre_id INTEGER,    FOREIGN KEY(show_id) REFERENCES shows(id),   FOREIGN KEY(genre_id) REFERENCES genres(id) )")

with open("Favorite TV Shows - Form Responses 1.csv", "r") as file:
    reader = csv.DictReader(file)
    for row in reader:
        titles = row["title"].strip().upper()
        show_id = db.execute("INSERT INTO shows (title) VALUES (?)", titles)
        for genre in row["genres"].split(", "):
            genre_id = db.execute("INSERT OR IGNORE INTO genres (genre) VALUES (?)", genre)
        db.execute("INSERT INTO shows_genres (show_id, genre_id) VALUES(?, ?)", show_id, genre_id)

共有1个答案

鲁明知
2023-03-14

您可以在适当的列上使用UNIQUE约束创建表(UNIQUE约束教程)。这样可以防止插入重复项。

请注意,当您试图插入副本时,它将返回一个错误。您只需要捕获此错误,这样它就不会使程序崩溃。
在本例中,如果需要ID,则可以使用WHERE子句查询表以获取现有的行。

另外,重要的是要注意,如果在编辑数据库时有其他操作,运行查询然后插入并不能保证唯一性。另一个线程/进程可能会在查询和插入之间插入有问题的值。

 类似资料:
  • 我正在尝试将以下数据写入csv文件。这些数据是employdetails name1-surname1-place1 名称4-surname4-place4 我希望输出在CSV文件上,一个在另一个下面,在单独的行上。 我写了下面的代码 -KD

  • 问题内容: 嗨,我正在尝试使用python将csv文件写入SQL Server数据库中的表中。传递参数时遇到错误,但是手动进行操作时不会遇到任何错误。这是我正在执行的代码。 错误:pyodbc.DataError :(“ 22001”,“ [22001] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]字符串或二进制数据将被截断。(8152)(SQLEx

  • 问题内容: 我有一个CSV文件,我想使用Python将此文件批量导入到sqlite3数据库中。该命令是“ .import .....”。但似乎不能这样工作。谁能给我一个在sqlite3中做事的例子吗?我正在使用Windows,以防万一。谢谢 问题答案:

  • 本文向大家介绍如何编写MySQL程序将数据插入表中?,包括了如何编写MySQL程序将数据插入表中?的使用技巧和注意事项,需要的朋友参考一下 要编写存储过程以将数据插入表中,首先需要创建一个表- 以下是写入存储过程以将数据插入表中的查询- 以下是调用上述存储过程以将数据插入表中的查询- 现在检查数据是否已插入表中- 这将产生以下输出-

  • 理想的解决方案如下所示: 其中'my_file.json'包含一个JSON格式的变量。

  • 假设我们有 2 个实体: 人实体-有2个属性person_id(手动输入)和名字 地址实体-有2个属性address_id(自动增量)和街道名称 每个Person都有一个地址(OneToOne关系)。因此地址实体将有一个外键(person_id)指向其关联的Person。您有什么建议? 到目前为止,我只找到了一种不用关系管理就能把单个实体导入mysql的方法: