如何在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
相关产品推荐
相关产品推荐

