我正在运行一个程序,当使用下拉菜单搜索时,该程序会从 SQLite3 数据库中提取信息。我尝试在显示的信息上使用
ORDER BY
函数,但不断出现打字错误。该函数依赖于 SQL 和 Python 的混合来允许从下拉菜单中搜索参数,并且没有 ORDER BY
语句,它工作得很好,我只需要它来对结果进行排序以使其更易于阅读。
我已经创建了表和数据库,这是函数调用的一小部分,我似乎找不到在哪里添加
ORDER BY
语句
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)
result = cursor.execute(eightspdSQL + "AND speed=?", [speed] + "ORDER BY brand ASC")
rows = result.fetchall()
connect.close()
return response(rows)
我希望能够在
result = cursor.execute(eightspdSQL + "AND speed=?", [speed]) + "ORDER BY brand ASC")
中混合使用 Python 和 SQL,但它一直抛出错误。
尝试将 orderby 合并到主 SQL 字符串 fourspdSQL 中。
cassettes_8spd.speed = ? 按盒式磁带订购_8spd.brand ASC
尝试从 Casesets_8spd 经销商表中执行此操作
我认为 [speed]) 我质疑右括号时可能存在语法错误,但总的来说,以下建议可能会使代码更具可读性。尝试在生成结果的最后一行使用格式化字符串:
result = cursor.execute(eightspdSQL + "AND speed=?", [speed]) + "ORDER BY brand ASC")
致
result = cursor.execute(f"{eightspdSQL} AND speed={speed} ORDER BY brand ASC")
问题在于,您将
speed
值包装在 []
中以创建列表,而您应该只将查询末尾的 int 作为参数传递,而不是使用字符串连接或 f 字符串。
使用串联或 f 字符串可能会导致 SQL 注入攻击。
result = cursor.execute(eightspdSQL + "AND speed=? ORDER BY brand ASC", speed)