[英]sqlite3 “OperationalError: near ”(“: syntax error” 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.