2011-05-03 52 views
3

我使用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子句一样。

任何帮助,将不胜感激。

回答

3

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

s = s.order_by(myTable.c[col_name].desc()) 
0
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排序结果。