SQLAlchemy ¿ORDEN DESCENDENTE?

Resuelto AP257 asked hace 13 años • 6 respuestas

¿Cómo puedo usar ORDER BY descendingen 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.

AP257 avatar Nov 15 '10 22:11 AP257
Aceptado

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.

Rick avatar Nov 15 '2010 17:11 Rick
from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))

Uso de @jpmc26

AP257 avatar Nov 15 '2010 15:11 AP257

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.

Radu avatar Apr 01 '2012 14:04 Radu

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

Anand Tripathi avatar Feb 24 '2017 14:02 Anand Tripathi