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

带变量的数据库查询执行报错: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:45:28