给出:
letters = list("abc")
我想在characters
列的letters
中获取所有包含c
中任何字母的行。我可以这样做,但只能使用python的字符串操作,考虑到它的漏洞,这是不合适的。
理想情况下(我的示例已简化),这将使用GLOB子句。
例如
>>> cur.execute(**the statement here**)
>>> print(cur.fetchall())
>>> [('a',), ('b',), ('c',)]
数据库的创建:
import sqlite3
import string
def char_generator():
for c in string.ascii_lowercase:
yield (c,)
con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute("create table characters(c)")
cur.executemany("insert into characters(c) values (?)", char_generator())
答案 0 :(得分:1)
也许此示例可以为您提供帮助。
import sqlite3
import string
def char_generator():
for c in string.ascii_lowercase:
yield (c,)
con = sqlite3.connect(":memory:")
def initdb():
cur = con.cursor()
cur.execute("create table characters(c)")
cur.executemany("insert into characters(c) values (?)", char_generator())
def search(value):
values = [c for c in value]
cur = con.cursor()
cur.execute('SELECT * FROM characters WHERE c IN ({0})'.format(','.join(['?' for c in values])), values)
return cur.fetchall()
if __name__ == '__main__':
initdb()
print(search("abcde"))
此代码使用参数。因此,您不必担心SQL注入。