首页 > 解决方案 > 带有可选解决方法的 SQLAlchemy 预过滤查询

问题描述

在 SQLAlchemy 中,我对查询进行了子类化,以便根据预过滤器配方预过滤我的查询:预过滤查询

但在某些情况下,我想绕过预过滤器以包含被过滤掉的结果。Flask-SQLAlchemy 中的一个示例在查询中有一个方法,但我正在努力使其适应我的正常 sqlachemy。

class QueryWithSoftDelete(BaseQuery):
   def __new__(cls, *args, **kwargs):
       obj = super(QueryWithSoftDelete, cls).__new__(cls)
       with_deleted = kwargs.pop('_with_deleted', False)
       if len(args) > 0:
           super(QueryWithSoftDelete, obj).__init__(*args, **kwargs)
           return obj.filter_by(deleted=False) if not with_deleted else obj
       return obj

   def __init__(self, *args, **kwargs):
       pass

   def with_deleted(self):
       return self.__class__(db.class_mapper(self._mapper_zero().class_),
                             session=db.session(), _with_deleted=True)

https://blog.miguelgrinberg.com/post/implementing-the-soft-delete-pattern-with-flask-and-sqlalchemy

如何在我的查询中包含这些结果?

标签: pythonsqlalchemy

解决方案


推荐阅读