动态ORDER BY子句中使用的SQLAlchemy的SQL表达式语言
问题描述:
我使用SQLAlchemy的SQL表达式语言如下:动态ORDER BY子句中使用的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):
我试图做到的是订购由结果的唯一列DESC结果组。
我尝试使用以下内容:
s.order_by(desc(myTable.c))
s.order_by(desc(myTable.c[0]))
我甚至试图通过创建一个列对象和秩序:
temp_col = Column(col_name, Integer)
s.order_by(desc(temp_col))
一切都无济于事。返回结果就好像没有order_by子句一样。
任何帮助,将不胜感激。
答
order_by()
SQLAlchemy中的方法不会修改它应用于的查询,但返回一个新的查询。列也是按名称访问的,而不是索引。使用类似以下内容:
s = s.order_by(myTable.c[col_name].desc())
答
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排序结果。