尝试学习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中传递变量一样容易,但事实并非如此。我认为这与我对元组的理解很差有关。
答案 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)