如何在 Python 中对包含参数的 SQLite3 表进行排序

问题描述 投票:0回答:3

我正在运行一个程序,当使用下拉菜单搜索时,该程序会从 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,但它一直抛出错误。

python sqlite
3个回答
0
投票

尝试将 orderby 合并到主 SQL 字符串 fourspdSQL 中。

cassettes_8spd.speed = ? 按盒式磁带订购_8spd.brand ASC

尝试从 Casesets_8spd 经销商表中执行此操作


0
投票

我认为 [speed]) 我质疑右括号时可能存在语法错误,但总的来说,以下建议可能会使代码更具可读性。尝试在生成结果的最后一行使用格式化字符串:

result = cursor.execute(eightspdSQL + "AND speed=?", [speed]) + "ORDER BY brand ASC")

result = cursor.execute(f"{eightspdSQL} AND speed={speed} ORDER BY brand ASC")

0
投票

问题在于,您将

speed
值包装在
[]
中以创建列表,而您应该只将查询末尾的 int 作为参数传递,而不是使用字符串连接或 f 字符串。

使用串联或 f 字符串可能会导致 SQL 注入攻击。

result = cursor.execute(eightspdSQL + "AND speed=? ORDER BY brand ASC", speed)
© www.soinside.com 2019 - 2024. All rights reserved.