繁体   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