所以我在Customers.db文件中有一个如下所示的表:
我想创建一个函数,它返回id等于用户输入的“rows”。该表也称为“客户”,所有列都是“TEXT”类型。
def run_query(db, query, args=NONE):
con = sqlite3.connect(db)
cur = con.cursor()
if args is None:
cur.execute(query)
else:
cur.execute(query, args)
data = cur.fetchall()
cur.close()
con.close()
return data
def get_info_by_id(db, ide):
query = "SELECT * FROM Customers WHERE id = ?"
return run_query(db, query, ide)
当我在这样的shell中运行它时
get_info_by_id('Customers.db','920')
我收到错误“sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用1,并且提供了3个。”
答案 0 :(得分:1)
您需要将run_query
功能更新为:
def run_query(db, query, *args):
# ^ *args here for variable number of arguments
# It will read additional arguments as tuples
..
cur.execute(query, args) # No need of if-else now
.. # It expects arguments to be in tuple format
有关*args
的更多信息,请查看:What does asterisk * mean in Python?
答案 1 :(得分:0)
args
的{{1}}参数必须是可迭代的,以便在必要时可以绑定到多个占位符(cur.execute
)。因此,您应该始终传递列表或元组。
?
当你传递一个字符串时,它被视为一个单字符字符串的可迭代,因此它表示有3个绑定(get_info_by_id('Customers.db', ['920'])
中有3个字符)。