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

Python中如何将字符串作为变量传入SQLite3数据库查询语句

问题原因

SQL 语法中的参数占位符(你代码里用的?)仅支持传入查询值,不支持传递表名、字段名这类 SQL 结构标识符,这是数据库为了避免 SQL 注入风险做的原生限制,所以你原来的写法无法生效。

修正方案

需要先对要传入的表名、字段名做白名单校验,再通过字符串格式化拼接进 SQL 语句,避免注入风险,修正后的代码示例如下:

# 提前定义允许查询的字段、表名白名单,根据你的实际业务调整
ALLOWED_COLUMNS = {"2610-48", "其他允许的字段名1", "其他允许的字段名2"}
ALLOWED_TABLES = {"2610-48", "其他允许的表名1", "其他允许的表名2"}

def find_model(column_name, table_name):
    # 先校验传入的标识符是否合法
    if column_name not in ALLOWED_COLUMNS or table_name not in ALLOWED_TABLES:
        raise ValueError("传入的字段名或表名不合法")
    # 字符串格式化拼接SQL语句,用双引号包裹包含特殊字符的标识符
    c.execute(f'''SELECT "{column_name}" FROM "{table_name}"''')
    rows = c.fetchall()
    for row in rows:
        print(row)

# 注意:如果2610-48是字符串类型的名称,需要加引号,否则Python会识别为减法运算
find_model("2610-48", "2610-48")

额外注意点

  • 不要省略白名单校验直接拼接用户输入的字符串到SQL中,会存在严重的SQL注入风险
  • 如果你的字段名、表名包含特殊字符(比如你这里的横杠-),拼接的时候要用双引号/反引号包裹,避免SQL语法解析错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:24:04