sql >> データベース >  >> RDS >> Sqlserver

関数の結果によるSQLAlchemyの順序

    ハイブリッド属性 PythonプロパティとSQL式の両方として機能する特別なメソッドです。 difficultyである限り 関数はSQLで表現でき、通常の列のようにフィルタリングと順序付けに使用できます。

    たとえば、問題のオウムの数として難易度を計算する場合、問題が30日より古い場合は、10倍します。

    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. ORACLEのselectステートメントが間違っています

    2. R関数内でSQL関数を呼び出す

    3. SQL SERVER:2つの日付の間の合計日数を取得します

    4. pyodbc-バルク挿入速度が非常に遅い