问题:SQLAlchemy按降序排列?
如何descending
在如下所示的SQLAlchemy查询中使用ORDER BY ?
此查询有效,但以升序返回:
query = (model.Session.query(model.Entry)
.join(model.ClassificationItem)
.join(model.EnumerationValue)
.filter_by(id=c.row.id)
.order_by(model.Entry.amount) # This row :)
)
如果我尝试:
.order_by(desc(model.Entry.amount))
然后我得到:NameError: global name 'desc' is not defined
。
回答 0
与FYI一样,您也可以将这些内容指定为列属性。例如,我可能已经做过:
.order_by(model.Entry.amount.desc())
这很方便,因为它避免了import
,并且可以在其他地方(例如关系定义等)中使用它。
有关更多信息,您可以参考此
回答 1
from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))
来自@ jpmc26的用法
回答 2
您可能要做的另一件事是:
.order_by("name desc")
这将导致:ORDER BY名称desc。这里的缺点是按顺序使用显式列名。
回答 3
您可以.desc()
像这样在查询中使用函数
query = (model.Session.query(model.Entry)
.join(model.ClassificationItem)
.join(model.EnumerationValue)
.filter_by(id=c.row.id)
.order_by(model.Entry.amount.desc())
)
这将按金额降序排列,或者
query = session.query(
model.Entry
).join(
model.ClassificationItem
).join(
model.EnumerationValue
).filter_by(
id=c.row.id
).order_by(
model.Entry.amount.desc()
)
)
使用SQLAlchemy的desc函数
from sqlalchemy import desc
query = session.query(
model.Entry
).join(
model.ClassificationItem
).join(
model.EnumerationValue
).filter_by(
id=c.row.id
).order_by(
desc(model.Entry.amount)
)
)
对于官方文档,请使用链接或检查以下代码段
sqlalchemy.sql.expression.desc(column)产生一个降序的ORDER BY子句元素。
例如:
from sqlalchemy import desc stmt = select([users_table]).order_by(desc(users_table.c.name))
将产生如下SQL:
SELECT id, name FROM user ORDER BY name DESC
desc()函数是ColumnElement.desc()方法的独立版本,可用于所有SQL表达式,例如:
stmt = select([users_table]).order_by(users_table.c.name.desc())
参数column –一个ColumnElement(例如标量SQL表达式),用于应用desc()操作。
也可以看看
asc()
nullsfirst()
nullslast()
Select.order_by()
回答 4
你可以试试: .order_by(ClientTotal.id.desc())
session = Session()
auth_client_name = 'client3'
result_by_auth_client = session.query(ClientTotal).filter(ClientTotal.client ==
auth_client_name).order_by(ClientTotal.id.desc()).all()
for rbac in result_by_auth_client:
print(rbac.id)
session.close()
回答 5
@Radu答案的补充,与SQL一样,如果您有许多具有相同属性的表,则可以在参数中添加表名。
.order_by("TableName.name desc")