运行 如果值在数据库中不存在则循环

Run Loop If Value Does Not Exist in Database

#update - 我修复了移动 a) 的语法错误,但它仍然无法按预期工作。现在它运行循环,即使是重复的,这不是本意。

我正在尝试将引用列表添加到数据库,但前提是作者尚不存在。我在这里遇到语法错误,并且没有现有的帖子可以帮助我解决这个问题。非常感谢任何帮助,并希望这对其他人有所帮助。

SELECT EXISTS 查询的第一行给出了错误,但不确定这是否是执行此操作的最佳方法。如果我犯了一些愚蠢的新手错误,我希望它能帮助其他人避免将来浪费时间。

#Check if author already exists
    if cursor.execute("SELECT EXISTS (SELECT 1 FROM quotebot WHERE author_name=?)", (author,)).fetchone():
        for text, author, title, in all_quotes:
            try: 
                if text is None or title is None and text == "":
                    continue
                # Insert quote into table
                cursor.execute("INSERT INTO quotebot("long-query-that-works"))
                sqliteConnection.commit()
                print('Quote Successfully Added')
              
            # Handle errors
            except sqlite3.Error as error:
                print('Error occured - ', error)
                
    else:
        print("This author is already in the database. Please try a new author.")

您的 fetchone() 将始终 return 一行。该行将包含 EXISTS 的值,如果引用存在则为 1,如果不存在则为 0。因此,仅检查 fetchone() returns 是否有任何内容不会告诉您是否已经存在重复项。 if 条件将始终成功,您将进入循环。

您应该检查由 fetchone() 编辑的 return 元组的内容:

if cursor.execute("SELECT EXISTS (SELECT 1 FROM quotebot WHERE author_name=?)", (author,)).fetchone()[0]:

或删除 EXISTS 测试和 return 行本身:

if cursor.execute("SELECT 1 FROM quotebot WHERE author_name=? LIMIT 1", (author,)).fetchone():