【问题标题】:WHERE NOT EXISTS SQL statement in sqlite3 [duplicate]sqlite3中的WHERE NOT EXISTS SQL语句[重复]
【发布时间】:2018-01-28 17:39:26
【问题描述】:

我的代码是这样的:

import sqlite3
def connect():
    conn = sqlite3.connect("books.db")
    cur = conn.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY, title text, author text, year integer)")
    conn.commit()
    conn.close()
def insert(title, author, year):
    conn = sqlite3.connect("books.db")
    cur = conn.cursor()
    cur.execute("INSERT INTO book VALUES (NULL, ?, ?, ?)", (title, author, year))
    conn.commit()
    conn.close()
connect()
insert("Title", "Author", 1950)

我想使用 WHERE NOT EXISTS SQL 语句以避免重复输入。我在 cur.execute() 的 WHERE NOT EXISTS 中尝试了不同的写作方式,但不断得到:

sqlite3.OperationalError:靠近“WHERE”:语法错误

【问题讨论】:

    标签: python sqlite not-exists


    【解决方案1】:

    为避免重复插入,请使用唯一索引或约束:

    create unique index unq_book_title_author_year on book(title, author, year);
    

    这比not exists 好,因为数据库强制执行唯一性。请注意,如果尝试重复插入,insert 将被尝试然后失败。

    【讨论】:

    • 正如@GordonLinoff 建议的那样,唯一索引将导致尝试复制索引条目以引发异常。这里的关键是问自己在你希望检测的情况下需要做什么。大概应该让用户知道尝试的条目已经存在。
    • 我明白了,不幸的是我似乎不知道如何为我的代码实现唯一索引(不断收到语法错误)。只是出于好奇,我还希望看到 WHERE NOT EXISTS SQL 语句在我的代码中起作用。
    • @DanielC.Tremură。 . . sqlite.org/lang_createindex.html
    • 不幸的是,SQL INSERT 语句就是这样 - 将一行插入到表中,没有条件允许。语法描述为here。您可能需要考虑INSERT OR REPLACE,但这仍然不会在没有索引的情况下提取重复项。
    猜你喜欢
    • 2013-04-17
    • 1970-01-01
    • 2013-10-30
    • 2019-05-18
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多