使用sqlAlchemy的SQL表达式语言动态按顺序排序

时间:2011-05-03 19:26:49

标签: sqlalchemy

我正在使用sqlAlchemy SQL Expression Language,如下所示:

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):

我想要完成的是通过结果集中的唯一一列来命令结果desc。

我尝试使用以下内容:

s.order_by(desc(myTable.c))
s.order_by(desc(myTable.c[0]))

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

temp_col = Column(col_name, Integer)
s.order_by(desc(temp_col))

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:4)

SQLAlchemy中的

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

s = s.order_by(myTable.c[col_name].desc())

答案 1 :(得分:2)

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()

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