[英]SQLAlchemy SQL expression with JSONB query
我在 flask-sqlalchemy model 上有以下屬性。 我想讓這個approved_at
屬性成為flask-admin 中的可排序列,但顯然我需要使用SQL 表達式將其轉換為混合屬性。
@property
def approved_at(self):
approved_log = (
db.session.query(AuditLog)
.filter_by(target_id=self.id, target_table='consult')
.filter(AuditLog.new_values['status'].astext == "APPROVED: 5")
.order_by(AuditLog.timestamp.desc())
.first()
)
if approved_log:
return approved_log.timestamp
我不知道如何將此查詢轉換為 sqlalchemy SQL 表達式,因為其中的 JSONB 查詢非常復雜。 我已經查看了所有其他 SO 答案,但無法弄清楚。
我可以就如何做到這一點獲得一些幫助嗎? 或者,如何在 Flask Admin 中創建一個不需要我使用混合表達式的可排序列?
將其作為混合實現有點簡單:
@hybrid_property
def _approved_at(self):
return (
db.session.query(AuditLog.timestamp)
.filter_by(target_id=self.id, target_table='consult')
.filter(AuditLog.new_values['status'].astext == "APPROVED: 5")
.order_by(AuditLog.timestamp.desc())
.limit(1)
)
@hybrid_property
def approved_at(self):
# return the first column of the first row, or None
return self._approved_at.scalar()
@approved_at.expression
def approved_at(cls):
# return a correlated scalar subquery expression
return cls._approved_at.as_scalar()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.