sqlite从包含字段中的字符串的表中检索项目

时间:2018-02-19 04:33:09

标签: python sqlite

我正在尝试从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背景,很容易用字符串插值/模板字符串。有没有人可以建议有助于达到预期的效果?我将不胜感激。提前谢谢!

1 个答案:

答案 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()