SQLAlchemy ¿ORDEN DESCENDENTE?
¿Cómo puedo usar ORDER BY descending
en una consulta SQLAlchemy como la siguiente?
Esta consulta funciona, pero los devuelve en orden ascendente:
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 :)
)
Si lo intento:
.order_by(desc(model.Entry.amount))
entonces me sale: NameError: global name 'desc' is not defined
.
Para su información, también puede especificar esas cosas como atributos de columna. Por ejemplo, podría haber hecho:
.order_by(model.Entry.amount.desc())
Esto es útil ya que evita unimport
y puede usarlo en otros lugares, como en una definición de relación, etc.
Para obtener más información, puede consultar esta documentación de SQLAlchemy 1.4.
from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))
Uso de @jpmc26
Otra cosa que podrías hacer es:
from sqlalchemy.sql import text
...
.order_by(text("name desc")
Esto dará como resultado: ORDER BY nombre desc. La desventaja aquí es el nombre de columna explícito que se utiliza para ordenar por.
Puede utilizar .desc()
la función en su consulta así:
query = (model.Session.query(model.Entry)
.join(model.ClassificationItem)
.join(model.EnumerationValue)
.filter_by(id=c.row.id)
.order_by(model.Entry.amount.desc())
)
Esto ordenará por monto en orden descendente o
query = session.query(
model.Entry
).join(
model.ClassificationItem
).join(
model.EnumerationValue
).filter_by(
id=c.row.id
).order_by(
model.Entry.amount.desc()
)
)
Uso de la función desc de SQLAlchemy:
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)
)
)
Para documentos oficiales, utilice el enlace o consulte el siguiente fragmento:
sqlalchemy.sql.expression.desc(columna) Produce un elemento de cláusula ORDER BY descendente.
p.ej:
from sqlalchemy import desc stmt = select([users_table]).order_by(desc(users_table.c.name))
producirá SQL como:
SELECT id, name FROM user ORDER BY name DESC
La función desc() es una versión independiente del método ColumnElement.desc() disponible en todas las expresiones SQL, por ejemplo:
stmt = select([users_table]).order_by(users_table.c.name.desc())
Columna de parámetros: un elemento de columna (por ejemplo, una expresión SQL escalar) con el que aplicar la operación desc().
Ver también
asc()
nulos primero()
último nulo()
Seleccionar.order_by()