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

Python函数传整数参数报错:TypeError: 格式字符串参数不足

问题原因及解决方法

错误根源

你当前的SQL字符串格式化写法逻辑错误:整个SQL语句包含两个%i占位符,但你先单独用% interval1去格式化完整的SQL字符串,此时占位符数量(2个)和传入参数数量(1个)不匹配,直接触发TypeError,后面的% interval2根本没机会执行。

修复方法

把两个参数放在元组里,一次性完成字符串格式化:

def test_prod(interval1, interval2):

    with connection.cursor() as cursor:
        sql = 'SELECT COUNT(*) ' \
              'FROM `use` ' \
              'WHERE `usepcd` = 2 ' \
              'AND year(`uw_datetime_end`) = year(now()) ' \
              'AND uw_datetime_end >= CURDATE() - INTERVAL WEEKDAY(CURDATE()) day - INTERVAL %i week ' \
              'AND uw_datetime_end < CURDATE() - INTERVAL WEEKDAY(CURDATE()) day - INTERVAL %i week ' \
              % (interval1, interval2)  # 改为元组传入两个参数
        cursor.execute(sql)
        row = cursor.fetchall()
        print(row)

    return row

更安全的写法(推荐)

直接用字符串格式化拼接SQL存在SQL注入风险,建议使用数据库驱动的参数化查询功能(以MySQL为例):

def test_prod(interval1, interval2):

    with connection.cursor() as cursor:
        sql = 'SELECT COUNT(*) ' \
              'FROM `use` ' \
              'WHERE `usepcd` = 2 ' \
              'AND year(`uw_datetime_end`) = year(now()) ' \
              'AND uw_datetime_end >= CURDATE() - INTERVAL WEEKDAY(CURDATE()) day - INTERVAL %s week ' \
              'AND uw_datetime_end < CURDATE() - INTERVAL WEEKDAY(CURDATE()) day - INTERVAL %s week '
        cursor.execute(sql, (interval1, interval2))  # 参数放在元组中传入execute
        row = cursor.fetchall()
        print(row)

    return row

这种写法既规避了SQL注入风险,也能更规范地处理参数传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:45:37