使用 sqlAlchemy 的 SQL 表达式语言的动态 Order By Clause

Ray*_*Ray 6 sqlalchemy

我正在使用 sqlAlchemy SQL 表达式语言,如下所示:

col_name = 'variable_col'
metadata = MetaData(db)
myTable = Table('table_name', metadata,
              Column(col_name, Integer))
s = myTable.select()
for rec in conn.execute(s):
Run Code Online (Sandbox Code Playgroud)

我想要完成的是按结果集中唯一的一列对结​​果进行排序。

我尝试使用以下方法:

s.order_by(desc(myTable.c))
s.order_by(desc(myTable.c[0]))
Run Code Online (Sandbox Code Playgroud)

我什至尝试创建一个 Column 对象并按以下顺序排序:

temp_col = Column(col_name, Integer)
s.order_by(desc(temp_col))
Run Code Online (Sandbox Code Playgroud)

一切都无济于事。返回结果就像没有 order_by 子句一样。

任何帮助,将不胜感激。

Cub*_*t88 9

from sqlalchemy import create_engine, desc, asc
from sqlalchemy.orm import sessionmaker, Query
# setup the session here...
sort_column = "tables_column_name"
sort_dir = "desc"  # or "asc"
sort = asc(sort_column) if sort_dir == "desc" else desc(sort_column)
query = Query([...]).filter(...)
query = query.order_by(sort)
results = session.execute(query).fetchall()
Run Code Online (Sandbox Code Playgroud)

我认为这是对动态排序/排序 SQL 结果的更完整的答案。

  • 您正在以相反的方式设置 `sort` var (2认同)

Den*_*ach 5

order_by()SQLAlchemy 中的方法不会修改它所应用的查询,而是返回一个新查询。列也是按名称访问的,而不是索引。使用类似以下内容:

s = s.order_by(myTable.c[col_name].desc())
Run Code Online (Sandbox Code Playgroud)