带变量的数据库查询执行报错:TypeError问题求助
解决带变量的数据库查询报错问题
问题原因
你的requeteDB函数仅接受单个字符串类型参数,但queryWithVar()返回的是包含SQL语句和参数列表的元组,调用requeteDB(queryWithVar())时自然触发类型错误。同时,cursor.execute()本身支持安全的参数化查询,但当前的requeteDB没有利用这个特性。
解决方案
修改requeteDB函数,让它支持接收SQL语句和参数列表两个参数,调用时通过元组解包传递参数即可。
修改后的完整代码
def requeteDB(sql_request, params=None): with connection.cursor() as cursor: # 带参数执行查询,无参数则直接执行SQL if params: cursor.execute(sql_request, params) else: cursor.execute(sql_request) row = cursor.fetchall() return row def queryWithVar(): var = 'something with spaces' return(''' Select col1 From table1 Where col2 = %s ''', [var]) # 调用方式:用*解包queryWithVar返回的元组 result = requeteDB(*queryWithVar())
关键说明
- 这种方式保留了参数化查询的安全性,彻底避免直接拼接字符串导致的SQL注入风险。
- 注意占位符格式需匹配你的数据库驱动:比如MySQL/PostgreSQL用
%s,SQLite用?,请根据实际情况调整。
内容的提问来源于stack exchange,提问作者problème0123
相关产品推荐
相关产品推荐

