Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Подреждане на SQLAlchemy по резултат от функция

Хибридни атрибути са специални методи, които действат както като свойство на Python, така и като SQL израз. Стига да имате difficulty може да се изрази в SQL, може да се използва за филтриране и подреждане като нормална колона.

Например, ако изчислите трудността като броя на папагалите, които проблемът има, по десет, ако проблемът е по-стар от 30 дни, ще използвате:

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
        )

и го заявете с:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Условието за филтриран индекс се игнорира от оптимизатора

  2. sp_executesql, което кара моята заявка да бъде много бавна

  3. Услуги за отчитане - име на група в заглавката на страницата

  4. Говорим за тесните места в производителността на SQL Server

  5. Как да изпълним .sql файл с помощта на powershell?