sql >> Databasteknik >  >> RDS >> Sqlserver

SQLAlchemy ordning efter funktionsresultat

Hybridattribut är speciella metoder som fungerar som både en Python-egenskap och ett SQL-uttryck. Så länge du har difficulty funktion kan uttryckas i SQL, den kan användas för att filtrera och ordna som en vanlig kolumn.

Om du till exempel beräknar svårighetsgrad som antalet papegojor ett problem har, gånger tio om problemet är äldre än 30 dagar, skulle du använda:

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
        )

och fråga det med:

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



  1. Från bas 10 till bas 26 endast med bokstäver så att 26 blir aa

  2. Hur man kör lagrade procedurer med Doctrine2 och MySQL

  3. starta om mysql-servern på windows 7

  4. Lägg till ny kolumn till resultat- och sammansmältningstabellen