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

如何仅在条目不存在的情况下插入到表中?[副本]

岳意蕴
2023-03-14

下面是将作者姓名添加到表中的部分代码。

def create_author_table():
    cursor.execute("CREATE TABLE IF NOT EXISTS author(name VARCHAR(100),PRIMARY KEY (name))")

if authorFound == 1:
    cursor.execute("INSERT author (name) VALUES (?)", (aname, ))
    conn.commit()

我的其余代码与我认为的问题无关,因此我没有包括它。

我有一个很长的作者名列表,每次读取一个名称时,我都会尝试将其写入作者表。但是,有些名称是重复的,这是一个问题,因为name是主键,所以我无法插入重复的名称。有人知道只插入表中不存在的名称的查询吗?我正在通过jupyter笔记本使用python 2.7和sqlite,以防有人需要知道。

我意识到这个网站上已经有很多类似的问题,但我已经浏览过了,我没有任何运气。这是我第一次使用python,所以我通常缺乏经验。

共有1个答案

寇甫
2023-03-14

SQLite中最简单的方法是定义唯一索引:

create unique index unq_author_name on author(name);

如果名称已经存在,则插入失败。这是最好的方法,因为数据库验证关系完整性。

另一种方法只是在插入时检查值:

INSERT author (name)
    SELECT x.name
    FROM (SELECT ? as name) x
    WHERE NOT EXISTS (SELECT 1 FROM author a WHERE a.name = x.name);

我担心的是,在某些比赛条件下,同一个名字可能会被输入多次。

 类似资料:
  • 问题内容: 我试图在 POSTGRES中 编写一个复杂的查询,这个问题是该子查询。 这是我的表(id是主键和自动递增): 在此表中,我想获取id为“ xyz”且appid = 2的id,如果不存在,则插入并返回ID。 我知道有几个类似的问题,有些问的有些相同,我已经尝试过了,但似乎没有用。 这是我试图起诉的,但未能按预期进行: 当添加新元素并返回新添加元素的ID时,此方法效果很好,但当行已存在时不

  • 问题内容: 我正在使用构建Web POST参数的方法,但是有一些值仅在它们不存在的情况下才想添加。 效果很好,但是如果我将变量设为可选,如何防止将其添加到参数中?像这样的东西(伪代码): 我希望这已经足够清楚了,有人知道如何解决吗? 问题答案: 创建初始字母后,您必须单独添加密钥: Python没有语法将键定义为条件键;如果您已经按顺序拥有所有内容,则可以使用dict理解: 但这不是很可读。 另一

  • 问题内容: 我试图将 1,500,000 条记录插入表中。在插入过程中遇到表锁定问题。所以我想出了下面的批处理插入。 我在表上有聚簇索引。部分只是为了限制插入的记录再次插入表中 我做对了,这样可以避免表锁定吗?还是有更好的方法。 注意: 批处理和不批处理插入所花费的时间或多或少相同 问题答案: 锁升级根本不可能与语句的一部分有关。 插入大量行是自然的结果 当使用ALTER TABLE SET LO

  • 我的老师想让我通过迭代找到用户10个输入的中位数。 这就是我使用迭代来查找总和,奇数数,最大值和质数数的方式。但我一直坚持要找到中位数。

  • 在我的代码中进行一系列计算后,我有了一个,其值为 然后,我需要将这个乘以,我希望计算出的值为

  • 问题内容: 在SQL(SQL Server)中,是否可以从表的标识列中检索下一个ID(整数),而实际上无需插入行?如果删除了最近的行,则不一定是最高ID加1。 我之所以这样问,是因为我们有时不得不用新行更新活动数据库。该行的ID在我们的代码中使用(例如,Switch(ID){Case ID:},并且必须相同。如果我们的开发数据库和实时数据库不同步,最好预先预测一个行ID部署之前。 我当然可以 SE