Sqlite操作错误:IF不存在的语法

2024-06-24 13:53:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我收到此代码的sql lite操作语法错误:

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 

错误是:

^{pr2}$

我是这样定义表的:

   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()

如果我错过了一些简单的东西,我很抱歉。我查看了代码好几次,并在网上搜索,我没有看到语法错误在哪里。我把我的查询和我在网上找到的进行了比较,结果似乎是一致的。我唯一能想到的是,如果我的参数不正确,但我试图改变它们,我仍然无法使其工作。在

提前谢谢你的帮助。在

-中日韩


Tags: 代码closeexecutetitlewithusernamecursorchecks
1条回答
网友
1楼 · 发布于 2024-06-24 13:53:08

IF NOT EXISTS与sqlite不兼容。您需要的insert语句如下:

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子句中。这种insert语句是compatible with sqlite。你可以玩sql fiddle here。在

因此,在Python函数中,请尝试以下操作:

^{pr2}$

相关问题 更多 >