You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python sqlite3模块如何将函数参数作为组成部分传入SQL语句

Python sqlite3 参数传入SQL语句实现方案

完全可以实现,sqlite3 内置的execute方法原生支持参数绑定,绝对不要自己用字符串拼接或者f-string代入参数,会有严重的SQL注入风险。

两种常用绑定方式

1. 问号占位符(位置参数)

适合参数少、顺序不容易搞混的场景,你给出的示例可以修改为:

def func(param):
    cur.execute("""
    SELECT * FROM this_table
    WHERE this_column_value = ?
    """, (param,))

注意:第二个参数必须是序列类型,哪怕只有1个参数,也要在后面加逗号构造为元组,否则会把参数本身当成可迭代对象拆分(比如传入字符串会被拆成单个字符,导致执行报错)。

如果有多个查询条件,按占位符顺序传入参数即可:

def func(param1, param2):
    cur.execute("""
    SELECT * FROM this_table
    WHERE column1 = ? AND column2 = ?
    """, (param1, param2))

2. 命名占位符(关键字参数)

适合参数多的场景,可读性更强,不容易搞混参数顺序:

def func(param):
    cur.execute("""
    SELECT * FROM this_table
    WHERE this_column_value = :target_val
    """, {"target_val": param})

占位符以:开头标识,第二个参数传入字典,字典的key和占位符名称对应即可。

注意:禁止使用字符串拼接/格式化的方式直接代入参数,例如cur.execute(f"SELECT * FROM this_table WHERE id = {param}")这类写法是高危的,恶意构造的参数可以直接篡改SQL逻辑,造成数据泄露、删除等不可逆损失。

内容的提问来源于stack exchange,提问作者J01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:36:04