2015-07-20 174 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+'%' 

这将包裹在%字符搜索字符串,使您的字符串在现场的任何地方出现。 要做到这一点与参数,我们需要把你的参数在通配符(%