2017-04-12 56 views
1

努力学习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. 

单词“乔SMOE”长8个绑定如果算上空间。但我不知道这意味着什么。我认为我可以简单地将一个变量传递给Sqlite,就像我在Python中传递变量一样简单,但似乎并非如此。我认为这与我对元组理解很差有关。

回答

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) 
+0

这做到了!我需要了解如何将python变量传递给sqlite。 – Biggen

+0

干杯,队友。快乐的编码给你:-) [DB-API](https://www.python.org/dev/peps/pep-0249/)是我开始思考的好地方。 – bernie