为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕丝7291255 2021-11-30 16:43:58
鉴于:letters = list("abc")我想获得的所有行characters包含在任何信件letters在他们的c列。我可以做到这一点,但只能使用 python 的字符串操作,鉴于它的漏洞,这是不合适的。理想情况下(我的示例已简化)这将使用 GLOB 子句。例如>>> cur.execute(**the statement here**)>>> print(cur.fetchall())>>> [('a',), ('b',), ('c',)]创建数据库:import sqlite3import stringdef 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())
查看完整描述

1 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

也许这个样本可以帮助你。


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 注入。


查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信