繁体   English   中英

Python SQLite如何使用'?'进行部分搜索? 占位符?

[英]Python SQLite how do you do partial searches using '?' placeholders?

假设我的查询如下所示:

q = SELECT * FROM MY_TABLE WHERE FIELD LIKE ?
cursor.execute(q, some_query_value)

这似乎没有进行“包含”搜索,所以我尝试这样做

q = SELECT * FROM MY_TABLE WHERE FIELD LIKE %?%
cursor.execute(q, some_query_value)

但是python似乎不喜欢这个。 这样做的正确方法是什么?

%通配符是要插值的值的一部分; 使用字符串连接或格式将其添加到要搜索的值中,而不是在查询中:

q = "SELECT * FROM MY_TABLE WHERE FIELD LIKE ?"
cursor.execute(q, ('%' + some_query_value + '%',))

要么

q = "SELECT * FROM MY_TABLE WHERE FIELD LIKE ?"
cursor.execute(q, ('%{}%'.format(some_query_value),))

现在, sqlite3可以正确引用value-with-wildcards进行插值。

尝试在查询字符串周围添加引号并在查询值中放置通配符:

q = '''SELECT * FROM MY_TABLE WHERE FIELD LIKE ?'''
some_query_value = '%test%'
cursor.execute(q, [some_query_value])

这是一个独立的示例,演示如何使用通配符进行查询。

import sqlite3

conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute('create table methodists (name text)')

c.executemany("insert into methodists VALUES (?)",
              [['George Lucas'], ['George W. Bush'], ['W. C. Handy']])

c.execute('select name from  methodists where name like ?', ['George%'])
print ', '.join(name for name, in c.fetchall())

c.execute('select name from methodists where name like ?', ['%W.%'])
print ', '.join(name for name, in c.fetchall())

结果:

George Lucas, George W. Bush
George W. Bush, W. C. Handy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM