首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将关系插入到将3个表与多个表连接到多个SQLALchemy - python关系的表中

将关系插入到将3个表与多个表连接到多个SQLALchemy - python关系的表中
EN

Stack Overflow用户
提问于 2013-04-19 10:56:20
回答 1查看 588关注 0票数 2

下面您可以看到我的数据库中的一些表是如何关联的。

如您所见,中间的表是将三个表与多到多的关系连接起来.

  1. 一个基因可以在多个器官中表达,也可以在多个实验中进行研究。
  2. 在一个器官中,可以表达多个基因,在一个以上的实验中可以研究一个器官。
  3. 在一个实验中,可以研究多个基因和器官。

我使用SQLAlchemy插入数据。我知道如何用连接两个表的表添加一个多到多的关系,大致上是这样做的:

代码语言:javascript
复制
def add_data():
    session=Session()
    gene = "BRCA2"
    gene_to_add = Gene(gene_name = gene)
    session.add(gene_to_add)

    experiment = "experiment1"
    experiment_to_add = Experiment(experimentAccession = experiment)
    gene_to_add.experiment_rel.append(experiment_to_add)

    organ = "brain"
    organ_to_add = Organ(organName = organ)

    session.commit()
    session.close()

但我不知道如何添加新的关系(在这种情况下,器官表)。我试过用扩展而不是附加,但它不起作用.

有人知道如何解决这种情况吗?也许数据库的结构应该改变。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2013-04-21 10:58:05

您可以始终使用关联对象

代码语言:javascript
复制
class Genes2Experiments2Organs(Base):
    __tablename__ = 'genes2experiments2organs'
    gene_id = Column(Integer, ForeignKey('genes.id'), primary_key=True)
    experiment_id = Column(Integer, ForeignKey('experiments.id'), primary_key=True)
    organ_id = Column(Integer, ForeignKey('organs.id'), primary_key=True)
    # relationships
    gene = relationship("Gene", backref="map") 
    experiment = relationship("Experiment", backref="map") 
    organ = relationship("Organ", backref="map") 


class Gene(Base):
    __tablename__ = 'genes'
    id = Column(Integer, primary_key=True)
    gene_name = Column(String)

class Experiment(Base):
    __tablename__ = 'experiments'
    id = Column(Integer, primary_key=True)
    experimentAccession = Column(String)

class Organ(Base):
    __tablename__ = 'organs'
    id = Column(Integer, primary_key=True)
    organName = Column(String)

###########################################
def add_data():
    session = Session()
    gene = "BRCA2"
    gene_to_add = Gene(gene_name = gene)
    #session.add(gene_to_add)

    experiment = "experiment1"
    experiment_to_add = Experiment(experimentAccession = experiment)
    #session.add(experiment_to_add)

    organ = "brain"
    organ_to_add = Organ(organName = organ)
    #session.add(organ_to_add)

    #gene_to_add.experiment_rel.append(experiment_to_add)
    assoc_obj_to_add = Genes2Experiments2Organs(
        gene = gene_to_add,
        experiment = experiment_to_add,
        organ = organ_to_add,
        )

    session.add(assoc_obj_to_add)

    session.commit()
    session.close()

add_data()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16103009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档