我在查询中做错了什么?

时间:2016-11-18 21:22:25

标签: python sql sqlite

所以我在Customers.db文件中有一个如下所示的表:

enter image description here

我想创建一个函数,它返回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个。”

2 个答案:

答案 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个字符)。