如何在SQLAlchemy中进行动态关联

2024-04-19 02:32:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含Experiment的表,每个Experiment都有一个专用的exp_%id_metrics表,其中包含metric_idvalue的表。我还有一个关联metric_idname的表。我想建立一种像下面代码中那样的关系。你做这件事的正确方法是什么?你知道吗

class Metric(Base):
    __tablename__ = 'metrics'

    id   = Column(Integer, primary_key=True)
    name = Column(String(256), nullable=False)

    def __str__(self):
        return "Metric(name='%s')" % (self.name)

class Experiment(Base):
    __tablename__  = 'experiments'

    id   = Column(Integer, primary_key=True)
    name = Column(String(256), nullable=False)

    @property
    def metrics_table(self):
        return Table('exp_%s_metrics' % self.id,
                     MetaData(),
                     Column('id', Integer, primary_key=True),
                     Column('metric_id', Integer, ForeignKey('metrics.id')),
                     Column('value', Integer))

    metrics = relationship("Metric", secondary=metrics_table)

    def __str__(self):
        return "Experiment(name='%s')" % (self.name)


for experiments in session.query(Experiment):
    print("%s" % experiment.name)
    for metric in experiment.metrics:
        print("\t%s: %s" % (metric.name, metric.value))

Tags: keynameselfidtruereturnvaluedef