sql >> Databáze >  >> RDS >> Sqlserver

SQLAlchemy pořadí podle výsledku funkce

Hybridní atributy jsou speciální metody, které fungují jako vlastnost Pythonu i jako SQL výraz. Pokud máte difficulty Funkce může být vyjádřena v SQL, lze ji použít k filtrování a řazení jako normální sloupec.

Pokud například vypočítáte obtížnost jako počet papoušků, které má problém, krát deset, pokud je problém starší než 30 dní, použijete:

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
        )

a dotazujte se pomocí:

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



  1. Rozdělit fixní hodnotu do zemí na základě denního sdílení příjmů

  2. připojená databáze je pouze pro čtení

  3. Změna z SQLite na PostgreSQL v novém projektu Rails

  4. Jak se připojit a extrahovat v SQL