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

时间:2016-10-22 14:24:25

标签: python sqlalchemy

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

那么如何在SQLAlchemy中的所有查询中忽略(从不考虑)is_deleted=True记录?

1 个答案:

答案 0 :(得分:5)

sqlalchemy event是解决方案!

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

如果你想在我的案例中指定模型名称(sqlalchemy模型类名称),例如'User',请使用:

if entity == 'User':
    query = query.filter(entity.is_verified == True)