sql >> Database teknologi >  >> RDS >> Sqlserver

SQLAlchemy rækkefølge efter funktionsresultat

Hybride attributter er specielle metoder, der både fungerer som en Python-egenskab og et SQL-udtryk. Så længe din difficulty funktion kan udtrykkes i SQL, den kan bruges til at filtrere og sortere som en normal kolonne.

For eksempel, hvis du beregner sværhedsgrad som antallet af papegøjer et problem har, gange ti hvis problemet er ældre end 30 dage, vil du bruge:

from datetime import datetime, timedelta
from sqlalchemy import Column, Integer, DateTime, case
from sqlalchemy.ext.hybrid import hybrid_property

class Problem(Base):
    parrots = Column(Integer, nullable=False, default=1)
    created = Column(DateTime, nullable=False, default=datetime.utcnow)

    @hybrid_property
    def difficulty(self):
        # this getter is used when accessing the property of an instance
        if self.created <= (datetime.utcnow() - timedelta(30)):
            return self.parrots * 10

        return self.parrots

    @difficulty.expression
    def difficulty(cls):
        # this expression is used when querying the model
        return case(
            [(cls.created <= (datetime.utcnow() - timedelta(30)), cls.parrots * 10)],
            else_=cls.parrots
        )

og forespørg det med:

session.query(Problem).order_by(Problem.difficulty.desc())



  1. Problem med MySQL FULLTEXT-forespørgsel

  2. Hvordan kan jeg udføre en LIKE-forespørgsel for en jsonb-nøgle?

  3. MySqlCommand Command.Parameters.Add er forældet

  4. Oracle SQL-forespørgsel for at udelukke rækker, der indeholder ikke-numeriske tegn