Python 如何使用;其中;及;及;操作员
我目前正在编写分析交易卡的代码,并将其存储在SQLite数据库中。以下列出了查询数据库中特定卡的功能之一: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
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注入。