如何在sqlite3中通过传入变量查询指定数据
- 现有代码未正确实现参数传入SQL的逻辑,
SELECT语句中的{name}缺少f-string前缀标识,不会被替换为实际传入的参数值 - 直接拼接变量到SQL字符串存在SQL注入风险,且字符串类型参数未加引号的情况下会触发SQL语法错误
- 查询类操作不需要调用
conn.commit(),仅增删改操作需要提交事务 conn.close后缺少括号,不会实际执行关闭数据库连接的操作
正确实现代码
import sqlite3 def getName(name): # 数据库连接放到函数内部,避免多次调用函数时连接提前关闭报错 conn = sqlite3.connect('database.db') c = conn.cursor() # 使用?作为参数占位符,参数放到execute的第二个元组参数中 data = c.execute("SELECT * FROM data WHERE Name=?", (name,)).fetchall() print(data) conn.close() getName('John')
上面的实现用sqlite3官方推荐的参数化查询方案,自动处理参数转义和类型适配,既规避了SQL注入风险,也不需要手动处理字符串拼接的引号问题。
内容的提问来源于stack exchange,提问作者Dylan Mac
相关产品推荐
相关产品推荐

