Я работаю на огромной базе кода, который делает все взаимодействия с базой данных следующим образом:Колба-SQLAlchemy: Автоматический фильтр для «удалено» записей
ExampleClass.query.all()
Если ExampleClass
наследует свойства db.Model
и наш BaseEntity
определен следующим образом:
class BaseEntity(object):
deleted = db.Column(db.DateTime, default=None, nullable=True)
... # more columns
Теперь, когда я запроса ExampleClass
для всех записей, ExampleClass.query.all()
, я хочу записи, где удаляется поле устанавливается на дату, иначе запись удаляется из системы должны быть исключены. Было бы идеально, если бы мне не пришлось обновлять всю кодовую базу простым .filter(deleted != None)
. Мое решение для этого заключалось в добавлении фильтра событий SQLAlchemy: before_compile
. Документация дала мне именно то, что искал:
@event.listens_for(Query, "before_compile", retval=True)
def no_deleted(query):
for desc in query.column_descriptions:
if desc['type'] is ExampleClass:
entity = desc['expr']
query = query.filter(entity.deleted == False)
return query
Однако я не могу получить эту работу, последняя ошибка я застрял на это следующим образом:
AttributeError: 'Mapper' object has no attribute 'deleted'
версий библиотек, которые я использую являются: Колба == 0.10.1, Колба-SQLAlchemy == 1,0, SQLAlchemy == 1.0.6