sql >> Database >  >> RDS >> Sqlserver

SQLAlchemy volgorde op functie resultaat

Hybride kenmerken zijn speciale methoden die fungeren als zowel een Python-eigenschap als een SQL-expressie. Zolang je difficulty functie kan worden uitgedrukt in SQL, het kan worden gebruikt om te filteren en te ordenen zoals een normale kolom.

Als u bijvoorbeeld de moeilijkheid berekent als het aantal papegaaien dat een probleem heeft, maal tien als het probleem ouder is dan 30 dagen, dan gebruikt u:

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
        )

en vraag ernaar met:

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



  1. Hoe panda's DataFrame upsert naar Microsoft SQL Server-tabel?

  2. Laravel Welsprekend met twee "WHERE NOT IN" in subquery

  3. Rijen extraheren uit een database inclusief afhankelijke rijen

  4. Noodzaak om IDX MLS in een website te integreren