用变量查询Sqlite数据库

时间:2017-04-12 13:19:41

标签: python sqlite

尝试学习Sqlite,我不确定我理解为什么我无法使用此代码:

def get_bday(self):
    name = self.input_name()
    self.c.execute('SELECT * FROM birthdays WHERE name =?', name)
    for row in self.c.fetchall():
        print(row)

从另一个方法返回name变量。对于此示例,我使用“joe smoe”而不使用引号作为名称变量来执行查询。当我运行上面的代码时,我得到:

self.c.execute('SELECT * FROM birthdays WHERE name =?', name)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 8 supplied.

如果计算空间,“joe smoe”这个词就是8个绑定。但我不知道这意味着什么。我假设我可以简单地将变量传递给Sqlite,就像我在Python中传递变量一样容易,但事实并非如此。我认为这与我对元组的理解很差有关。

1 个答案:

答案 0 :(得分:2)

SQLite目前认为您要查询'joe smoe'的每个字母。

要避免这种情况,你需要做的就是将name放在某种容器中:例如元组或列表:

def get_bday(self):
    name = self.input_name()
    self.c.execute('SELECT * FROM birthdays WHERE name =?', (name,))
    #                                                       ^    ^^
    for row in self.c.fetchall():
        print(row)