【问题标题】:Sqlite operationalError: syntax for IF NOT EXISTSSqlite operationError:IF NOT EXISTS 的语法
【发布时间】:2014-04-05 14:59:56
【问题描述】:

我收到此代码的 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 

错误是:

  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

【问题讨论】:

  • 这看起来可能会有所帮助:stackoverflow.com/questions/531035/… 我会尽力提供帮助,但我对数据库一无所知。
  • @CodyPiersall 感谢您的帮助,但没有成功。即使在您的链接中实现代码后,我仍然遇到语法错误。
  • 对不起@cjuf,但我对 Sqlite 或任何其他数据库系统一无所知。希望有人能提供帮助。

标签: python sql sqlite python-2.7


【解决方案1】:

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 子句中。这种插入语句是compatible with 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

【讨论】:

    猜你喜欢
    • 2015-05-16
    • 2021-06-13
    • 2011-11-15
    • 1970-01-01
    • 2021-08-29
    • 2020-09-01
    • 2016-09-16
    • 2021-10-20
    • 2012-06-05
    相关资源
    最近更新 更多