[英]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.