2017-04-12 58 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