亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號