我正在尝试从Python中的SQLite数据库表中检索项目,其中特定字段中存在匹配项。换句话说,如果我搜索'rabbit'
,我想检索特定列中包含字符串'rabbit'
的所有条目。我的代码如下所示:
端点的Python服务器代码:
if self.path=='/getOne':
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type'],
})
value = []
for key in form.keys():
value.append("%" + form.getvalue(key) + "%")
print 'LOOK my value', value
c.execute('select * from appointments where description=?' , value)
res = c.fetchall()
# _json = json.dumps(res)
# print 'This is res from _get_all_appts', res
# print 'From line 18: ', _json
# self.wfile.write(_json)
print "I'm ya huckleberry", res
return
在控制台中打印什么:
From line 18: [["15:01", "asdf", "2020-05-07"], ["14:01", "test",
"2020-04-04"]]
LOOK my value ['%test%']
I'm ya huckleberry []
LOOK my value ['%test%']
I'm ya huckleberry []
正如您所看到的那样,第18行打印的是我桌子上的条目。
我的值['%test%]
应该返回第二个条目,因为我想在该特定列中返回包含字符串test
的任何条目,但我什么也得不到。我来自JS背景,很容易用字符串插值/模板字符串。有没有人可以建议有助于达到预期的效果?我将不胜感激。提前谢谢!
答案 0 :(得分:0)
对于问题第一部分的答案,LIKE
运算符可能会解决问题:
SELECT *
FROM appointments
WHERE description LIKE '%rabbit%';
如果这不符合您的期望,那么您可以尝试使用SQLite查看全文搜索。上述查询可能不适合你的一个原因是它会匹配任何地方出现的子串rabbit
。例如,它也匹配rabbits
。全文搜索可以解决大多数边缘情况。
要使LIKE
表达式中的术语动态化,您可以沿着以下几行使用Python代码:
param = 'rabbit'
t = ('%'+param+'%',)
c.execute('select * from appointments where description like ?', t)
c.fetchall()