gpt4 book ai didi

python - 如何从传递关系访问数据?

转载 作者:行者123 更新时间:2023-12-01 09:16:40 25 4
gpt4 key购买 nike

假设我在 SQLAlchemy 中定义了 3 个表:TaskJobLog,其中 Task 定义了一些可以执行的任务类型,Job 定义了执行任务的具体值,Log 存储了每次执行的一些信息。所以每个日志都知道它的作业 ID,每个作业都知道它的任务 ID:

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)
# ...

在我们的 GUI 中,我们按顺序列出了所有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 不存在。是否有其他优雅的方式来按 Task 名称过滤 Log 条目?

最佳答案

找到了这个解决方案:

class LogDAO(DAO):
# ...
def with_task_name(task_name):
return self.session.query(Log)
.join(Log.job)
.join(Job.task)
.filter(Task.name == task_name)

关于python - 如何从传递关系访问数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51191122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com