2015-07-20 176 views
-1

我有一個搜索框,其中可以輸入一些文本並返回數據庫的結果,例如,如果我要搜索'John Smith'記錄的所有約翰史密斯會出現。使用sqlite和python從字符串中搜索關鍵字

但是,我想讓搜索不那麼具體,就像我只是搜索'John'那條記錄會出現一樣。

這是我的查詢:

cur = g.db.execute('SELECT name, id, location, education FROM accounts WHERE email=? COLLATE NOCASE OR name=? COLLATE NOCASE OR education=? COLLATE NOCASE', (query, query, query,)) 

正如你所看到的,它也返回一個搜索不只是「名」,而是「位置」和「教育」過,所以我想關鍵字搜索也適用於這些。

謝謝。

+1

是不是'選擇*從電話簿在哪裏名稱LIKE「%約翰%」'你想要什麼? –

+0

當搜索框返回一個像'John Smith'這樣的字符串時,我將不得不拆分查詢,使其成爲'John'和'Smith',然後將其放入查詢中,這是我不確定的。對不起,如果我不清楚。 –

+0

然後「John Smith」.split(「」)返回[「John」,「Smith」] –

回答

0

你想要一個LIKE聲明。您的SQL看起來就像這樣:

SELECT name, id, location, education FROM accounts WHERE email='John' 
COLLATE NOCASE OR name LIKE '%John%' COLLATE NOCASE OR education='John' 
COLLATE NOCASE 

注意的LIKEOR name LIKE '%John%'


cur = g.db.execute('SELECT name, id, location, education FROM accounts WHERE email=? COLLATE NOCASE OR name LIKE ? COLLATE NOCASE OR education=? COLLATE NOCASE', (query, '%'+query+'%', query,)) 

同樣請注意,在nameOR聲明已改變:

OR name LIKE ? 

隨着這個,但是,我們也改變了通過參數:

'%'+query+'%' 

這將包裹在%字符搜索字符串,使您的字符串在現場的任何地方出現。 要做到這一點與參數,我們需要把你的參數在通配符(%