Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当LIKE变量/模式可以更改时,如何向SQL查询(?,%?%,…)_Python_Sql_Database - Fatal编程技术网

Python 当LIKE变量/模式可以更改时,如何向SQL查询(?,%?%,…)

Python 当LIKE变量/模式可以更改时,如何向SQL查询(?,%?%,…),python,sql,database,Python,Sql,Database,首先,如果我没有使用正确的术语,我很抱歉,这是我唯一参加的编程课程,我是法国人。我想用Python制作一个应用程序,在其中输入游戏类别和其他信息,以查找符合标准的游戏。然后应用程序在SQL数据库中搜索。问题在于,由于它将是一款图形应用程序,因此该类别随时可能发生变化。所以我想把它作为一个例子?在我的SQL查询中,然后用用户条目填充它,但通过这种方式,它只会找到只有一个类别的游戏,我在它们的类别描述中写道,有些游戏有不止一个类别 query = (''' SELECT "attri

首先,如果我没有使用正确的术语,我很抱歉,这是我唯一参加的编程课程,我是法国人。我想用Python制作一个应用程序,在其中输入游戏类别和其他信息,以查找符合标准的游戏。然后应用程序在SQL数据库中搜索。问题在于,由于它将是一款图形应用程序,因此该类别随时可能发生变化。所以我想把它作为一个例子?在我的SQL查询中,然后用用户条目填充它,但通过这种方式,它只会找到只有一个类别的游戏,我在它们的类别描述中写道,有些游戏有不止一个类别

    query = ('''
    SELECT "attributes.boardgamecategory", "details.name", "details.description" FROM BoardGames 
    WHERE "details.maxplayers" <= ?
    AND "details.maxplaytime" <= ?
    AND "game.type" = 'boardgame'
    AND "attributes.boardgamecategory" LIKE ?
    ORDER BY RANDOM() LIMIT 1
    ''')
    cur.execute(query, (max_players, max_playtime, 'Adventure'))
因此,我尝试将“?”替换为“%”,但无效:


    query = ('''
    SELECT "attributes.boardgamecategory", "details.name", "details.description" FROM BoardGames 
    WHERE "details.maxplayers" <= ?
    AND "details.maxplaytime" <= ?
    AND "game.type" = 'boardgame'
    AND "attributes.boardgamecategory" LIKE '%?%'
    ORDER BY RANDOM() LIMIT 1
    ''')
    cur.execute(query, (max_players, max_playtime, 'Adventure'))

>>>sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 2, and there are 3 supplied.
我不知道还能尝试什么。请帮帮我

您应该将%something%绑定到类似通配符的占位符:

query = """
SELECT attributes.boardgamecategory, details.name, details.description
FROM BoardGames 
WHERE details.maxplayers <= ? AND
      details.maxplaytime <= ? AND
      game.type = 'boardgame' AND
      attributes.boardgamecategory LIKE ?
ORDER BY RANDOM() LIMIT 1
"""
cur.execute(query, (max_players, max_playtime, '%Adventure%'))

这管用!但我只是以“冒险”为例。。。它需要根据用户编写的内容进行更改。它将是«catego»:def find_a_gamemax_playtime,max_players,catego然后构建您的通配符表达式,例如输入='Adventure'。。。exp='%'+input+'%'天哪,我发誓我早就试过了,但没用。。。一定是做错了什么,因为它现在起作用了!非常感谢当前执行,最多玩家,最多游戏时间,'%'+catego+'%