Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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 如何使用;其中;及;及;操作员_Python_Database_Sqlite - Fatal编程技术网

Python 如何使用;其中;及;及;操作员

Python 如何使用;其中;及;及;操作员,python,database,sqlite,Python,Database,Sqlite,我目前正在编写分析交易卡的代码,并将其存储在SQLite数据库中。以下列出了查询数据库中特定卡的功能之一: def colors_search(conn,deck_color,card_ID): """ Query all rows in the colors table :param conn: the Connection object :return: """ color = (deck

我目前正在编写分析交易卡的代码,并将其存储在SQLite数据库中。以下列出了查询数据库中特定卡的功能之一:

    def colors_search(conn,deck_color,card_ID):
        """
        Query all rows in the colors table
        :param conn: the Connection object
        :return:
        """
        color = (deck_color,)
        test = (color,card_ID)
        sql = ''' SELECT Number
                  FROM Colors
                  WHERE Color=?
                  AND Card_ID=?'''

        cur = conn.cursor()
        cur.execute(sql,test)

        number = cur.fetchall()

        return number
当我尝试运行此函数时,不断出现以下错误:

sqlite3.InterfaceError:绑定参数0时出错-可能是不支持的类型

这是指这条线

当前执行(sql,测试)

我觉得错误来自于我试图查询两个变量的方式,但我不确定。如果这是问题所在,我将如何格式化'sql'变量以接受两个参数?CACK_color和card_ID变量为 一个字符串和一个整数,并且在我的程序中会有所不同,所以我不能在中硬编码它们


或者,如果这不是问题所在,如何重新格式化以正确运行?谢谢

您可以尝试使用当前执行(sql,(卡片颜色、卡片ID)),
或者
cur.execute(sql[deck\u color,card\u ID])
您的查询没有问题。问题在于:

color = (deck_color,)
不需要创建这个元组。相反:

def colors_search(conn,deck_color,card_ID):
        """
        Query all rows in the colors table
        :param conn: the Connection object
        :return:
        """
        test = (deck_color,card_ID)
        sql = ''' SELECT Number
                  FROM Colors
                  WHERE Color=?
                  AND Card_ID=?'''

        cur = conn.cursor()
        cur.execute(sql,test)

        number = cur.fetchall()

        return number
由于您使用的是
,因此这些值已被转义以防止SQL注入。无需创建自己的元组。

作为更新:

我发现错误是由输入引起的,而不是函数本身。前面的函数(引入它)看起来是这样的:

    def cards_search(conn,cardname):
        """
        Query all rows in the tasks table
        :param conn: the Connection object
        :return:
        """
        name = (cardname,)
        sql = ''' SELECT Card_ID
                  FROM Cards
                  WHERE Name=?'''

        cur = conn.cursor()
        cur.execute(sql,name)

        card_ID = cur.fetchall()

        return card_ID
这导致card_ID是一个列表,这意味着它不是我以前认为的数据类型。我通过将return语句更改为如下方式修复了此问题:

    return card_ID[0]
我的新功能正在运行,如下图所示:

    def colors_search(conn,deck_color,card_ID):
        """
        Query all rows in the colors table
        :param conn: the Connection object
        :return:
        """
        test = (deck_color,card_ID)
        sql = ''' SELECT Number
                  FROM Colors
                  WHERE Color=?
                  AND Card_ID=?'''

        cur = conn.cursor()
        cur.execute(sql,test)

        number = cur.fetchall()

        return number[0]

感谢您的贡献

不,它来自
test
,您需要打印它。我怀疑
color
是来自上一个查询的元组wait,实际上是一个元组。去掉
color=(deck\u color,)
。这没有用。这就是查询失败的原因,据我所知,将其设置为元组除了导致此错误外,不会做任何其他事情。您的查询已经可以防止SQL注入。