在 SELECT 语句中使用 sqlite3 DB-API 多参数替换

鉴于:


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


慕丝7291255
浏览 177回答 1
1回答

桃花长相依

也许这个样本可以帮助你。import sqlite3import stringdef 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 注入。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python