我在所有表中都有一个is_deleted
字段,表明此记录已被删除(但它存在于表中)。
那么如何在SQLAlchemy中的所有查询中忽略(从不考虑)is_deleted=True
记录?
答案 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)