python - SQLite操作错误: syntax for IF NOT EXISTS

标签 python sql sqlite python-2.7

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

最佳答案

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

关于python - SQLite操作错误: syntax for IF NOT EXISTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22882513/

相关文章:

python - 合并排序单词列表

MySql:获得比百分之一秒更精确的时间测量

encryption - 具有加密/密码保护的 SQLite

mysql - 如何将大型数据库从 Heroku 导入到本地 mysql 或 sqlite3?

Python - for循环退出 'prematurely'

python - 返回一行中的单词列表但忽略某些空格

python - 如何使用正则表达式和精确文字匹配的混合来获取索引值

python - 在文件循环中连接 Pandas 数据框

java - ORA-00918 : "Column ambiguously defined"

sql - Oracle session 临时表中的数据何时会被删除?