如何在所有SQLAlchemy的查询中实现默认条件

mor*_*ipo 3 python sqlalchemy

is_deleted在所有表中都有一个字段,该字段表明该记录已被删除(但它存在于表中)。

那么,如何忽略(从未考虑)is_deleted=TrueSQLAlchemy中所有查询中的记录?

Ima*_*ian 5

sqlalchemy 事件是解决方案!

from sqlalchemy.orm.query import Query
from sqlalchemy import event

@event.listens_for(Query, "before_compile", retval=True)
def no_deleted(query):
    for desc in query.column_descriptions:
        entity = desc['entity']
        if entity:
            query = query.filter(entity.is_deleted == False)

    return query
Run Code Online (Sandbox Code Playgroud)

如果要指定模型名称(sqlalchemy模型类名称),例如“ User”,请使用以下命令:

if entity == 'User':
    query = query.filter(entity.is_verified == True)
Run Code Online (Sandbox Code Playgroud)