簡體   English   中英

sqlite3“ OperationalError:附近”)“:語法錯誤” python

[英]sqlite3 “OperationalError: near ”)“: syntax error” python

該功能應該檢查用戶在提示后輸入的成分。 當我在sqlite中嘗試此查詢語句時(當然,無需用戶輸入),它會起作用。 在python中說有錯誤!

def checkIngredient():

   usrIngredient = input("\nEnter an ingredient that you would like to make a drink with: \n\n")

    query = c.execute("SELECT DRDESC FROM Drinks WHERE DRDRID IN "
    "(SELECT DTDRID FROM Detail WHERE INGID ="
    "(SELECT INGID FROM Ingredients WHERE INDESC LIKE))", (usrIngredient,))


    resultset = c.fetchall()

    for result in resultset:
        if resultset is not None:
            print(result)
        else:
            print("Sorry, there are no drinks with that ingredient")

您的查詢中未包含SQL參數占位符 您必須放置一個? 在查詢中要插入的每個值:

query = c.execute("""
    SELECT DRDESC FROM Drinks WHERE DRDRID IN
      (SELECT DTDRID FROM Detail WHERE INGID =
        (SELECT INGID FROM Ingredients WHERE INDESC LIKE ?))
    """, (usrIngredient,))

您可能要研究進行聯接,我懷疑使用嵌套選擇是否會很好地執行。 我懷疑以下方法會更好:

query = c.execute("""
    SELECT dr.DRDESC
    FROM Drinks as dr 
    INNER JOIN Detail as dtd on dr.DRDRID == dtd.DTDRID
    INNER JOIN Ingredients as ing on dtd.INGID = ing.INGID
    WHERE ing.INDESC LIKE ?
    """, (usrIngredient,))

如果usrIngredient視為子字符串搜索 ,則必須向其中添加通配符,以使LIKE正常工作。 %字符括起來的值:

usrIngredient = '%{}%'.format(usrIngredient)

這將用%eggs%替換字符串eggs ,以查找包含文本eggs所有匹配成分描述。

也許是這樣的:

query=c.execute("""SELECT Drinks.DRDESC
                   FROM Drinks JOIN Detail JOIN Ingredients
                   ON Drinks.DRDRID = Detail.DTDRID
                   AND Detail.INGID = Ingredients.INGID
                   where Ingredients.INDESC like ?""",(usrIngredient,) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM