Допустим, у меня есть 3 таблицы, определенные в SQLAlchemy: Task
, Job
, Log
, где Task
определяет какую-то задачу, которая может быть выполнена, Job
определяет конкретные значения выполненной задачи и Log
хранит некоторую информацию о каждом исполнении. Таким образом, каждый журнал знает свой идентификатор работы, и каждая работа знает свой идентификатор задачи:
class Task(DeclarativeBase):
__tablename__ = 'task'
id = Column(Integer, primary_key=True)
name = Column(String(250), nullable=False)
# ...
jobs = relationship("Job", backref="task")
class Job(DeclarativeBase):
__tablename__ = 'job'
id = Column(Integer, primary_key=True)
task_id = Column(Integer, ForeignKey("task.id"), nullable=False)
# ...
logs = relationship("Log", backref="job")
class Log(DeclarativeBase):
__tablename__ = 'name'
id = Column(Integer, primary_key=True)
job_id = Column(Integer, ForeignKey("job.id"), nullable=False)
# ...
В нашем графическом интерфейсе мы перечисляем все Log
записи по порядку, чтобы наши клиенты могли их просмотреть. Однако нам нужно отфильтровать их сейчас, и мы хотим отфильтровать их по имени задачи. Мой наивный подход был новым методом в нашем LogDAO
class DAO(object):
def __init__(self, session, model):
""" :param session: The database session that is used for data access
:param model: The db model class
"""
self.session = session
self.model = model
class LogDAO(DAO):
def __init__(self, session):
super(LogDAO, self).__init__(session, Log)
# ...
def with_task_name(task_name):
self.session.query(self.model.job.task.name == task_name)
self.model.job
существует, но self.model.job.task
не существует. Есть ли другой элегантный способ фильтрации Log
записей по Task
имени?