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

Python中SQLite变量查询方法及拼接变量失效问题排查

在Python的SQLite中使用变量查询的正确方式

你直接用字符串拼接"+uid+"的方式确实容易出问题——不仅可能因为类型不匹配(比如你的Id如果是字符串类型,拼接后没加引号就会导致SQL语法错误),还存在严重的SQL注入风险,这就是你变量没被正确识别的核心原因。

在Python的SQLite操作中,正确的做法是使用参数化查询,让SQLite自己处理变量的类型和转义,既安全又可靠。下面给你两种常用的实现方式:

方法1:使用?作为占位符

这是SQLite官方推荐的方式,把变量作为第二个参数传给execute方法:

import datetime
import sqlite3 as lite
import sys

con = lite.connect('user.db')
uid = raw_input("UID?: ")
time = datetime.datetime.now()

with con:
    cur = con.cursor()
    # 用?代替变量,把uid放进元组作为第二个参数
    cur.execute("SELECT Name FROM Users WHERE Id = ?;", (uid,))
    rows = cur.fetchall()
    for row in rows:
        print row

print time

方法2:使用命名占位符(更易读)

如果查询里有多个变量,用命名占位符会更清晰:

cur.execute("SELECT Name FROM Users WHERE Id = :uid;", {"uid": uid})

为什么不要用字符串拼接?

  • SQL注入风险:如果用户输入类似'; DROP TABLE Users;--这样的内容,直接拼接会导致你的数据库表被删除,这是非常危险的操作。
  • 类型处理问题:SQLite会自动根据变量类型处理引号和转义,比如字符串会自动加上单引号,数字则不需要,手动拼接很容易因为疏忽导致语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:57:21