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

如何在Python中从SQLite3表获取带参数的排序查询结果

问题分析与解决

你的代码触发TypeError的核心原因有两个:

  • SQL语句拼接时缺少空格,导致语法错误
  • 错误地将参数列表[speed]与字符串"ORDER BY brand ASC"直接相加,列表和字符串无法执行加法操作

修正后的代码

eightspdSQL = '''SELECT cassettes_8spd.brand, cassettes_8spd.model, cassettes_8spd.partNumber, cassettes_8spd.speed, cassettes_8spd.ratio, distributor_table.distributor_name, cassettes_8spd.rrp, distributor_table.distributor_link_url 
        FROM cassettes_8spd, distributor_table WHERE cassettes_8spd.distributor_id = distributor_table.distributor_id '''

def get_speed_8spd(speed: int):
    connect = connect_database()
    cursor = connect.cursor()
    print(speed)
    # 1. 在AND前添加空格,保证SQL语法正确
    # 2. 将ORDER BY拼接到SQL字符串末尾,参数列表仅传递查询变量
    result = cursor.execute(eightspdSQL + " AND speed=? ORDER BY brand ASC", [speed])

    rows = result.fetchall()
    connect.close()
    return response(rows)

关键改动说明

  • SQL语句拼接:原代码中eightspdSQL + "AND speed=?"会导致WHERE子句末尾直接连AND(比如...distributor_idAND speed=?),添加空格后变成...distributor_id AND speed=?,符合SQL语法规范。
  • ORDER BY位置:ORDER BY属于SQL查询语句的一部分,应该直接拼接到完整的SQL字符串中,不需要和参数列表混合。参数列表[speed]仅用于传递speed变量,既避免SQL注入风险,又保证语法正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:43:15