SQLite 操作错误:IF NOT EXISTS 的语法问题。

3
我对这段代码出现了一个SQLite的操作语法错误:
```sql ```
def checkIn(uname, title):
   bookid = findBookID(title) #returns an int bookid given the title
   print bookid
   with libDB:
      checkCur = libDB.cursor()
      checkCur.execute(
         "IF NOT EXISTS(SELECT 1 FROM Checks WHERE Username =? AND bookID =?) INSERT INTO Checks VALUES(?,?)",
         (uname, bookid, uname, bookid))
      checkCur.close()
      mess = "OK::CHKIN::", uname, "::", title
      return mess 

错误内容如下:
  sqlite3.OperationalError: near "IF": syntax error

这是我定义表格的方式:
   with libDB:
     checkCur = libDB.cursor()
     checkCur.execute(
         "CREATE TABLE Checks(bookID INTEGER, Username TEXT, FOREIGN KEY(bookID) REFERENCES Books(bookID),FOREIGN KEY(Username) REFERENCES Users(Username))")
     checkCur.close()

抱歉,如果我漏掉了一些简单的东西。我已经多次检查了代码并在网上搜索过,但我没有看到语法错误所在。我将我的查询与我在网上找到的查询进行了比较,它们似乎匹配。我能想到的唯一可能出错的是我的参数可能不正确,但我尝试更改它们,仍然无法使其正常工作。
谢谢您提前的帮助。
-CJ

1
这个看起来可能会有帮助:https://dev59.com/f3RB5IYBdhLWcg3wvpic 我想帮忙,但我对数据库一无所知。 - Cody Piersall
@CodyPiersall 谢谢你的帮助,但是它没有起作用。即使我实施了你链接中的代码,我仍然得到语法错误。 - cjuffo
抱歉 @cjuf,我不知道关于Sqlite或其他任何数据库系统的任何信息。希望有人能来帮忙。 - Cody Piersall
1个回答

2
"IF NOT EXISTS" 与 SQLite 不兼容。您想要的插入语句如下:
INSERT INTO Checks (bookID, Username)
  SELECT 7, 'Bob'  /* for example */
    WHERE NOT EXISTS (SELECT 1 FROM Checks WHERE bookID = 7 and Username = 'Bob');

请注意,NOT EXISTSWHERE 子句中。这种类型的插入语句与 SQLite 兼容。您可以在此处玩耍sql fiddle here

因此,在您的 Python 函数中,请尝试使用以下代码:

insert_stmt = ("INSERT INTO Checks (bookID, Username) "  # note the space at end of string
                  "SELECT ?, ? "
                  "WHERE NOT EXISTS (SELECT 1 FROM Checks WHERE bookID = ? and Username = ?)")
checkCur.execute(insert_stmt, (bookid, uname) * 2)  # no need to repeat the bookid, uname combo twice; just multiply the tuple by 2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接