python - 使用 SQLALchemy 将关系插入到连接 3 个具有多对多关系的表的表中 - python

标签 python insert sqlalchemy many-to-many foreign-key-relationship

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

diagram

正如您所看到的,中间的表连接了 3 个具有多对多关系的表...

  1. 一种基因可以在多个器官中表达并在多个实验中进行研究
  2. 在一个器官中,可以表达多个基因,并且可以在多个实验中研究一个器官。
  3. 在一项实验中,可以研究多个基因和器官

我正在使用 SQLAlchemy 插入数据。我知道如何向连接两个表的表添加多对多关系,或多或少我是这样做的:

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()

但我不知道如何添加新关系(在本例中为器官表)。我尝试使用扩展而不是附加,但它不起作用......

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

最佳答案

您始终可以使用 Association Object :

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()

关于python - 使用 SQLALchemy 将关系插入到连接 3 个具有多对多关系的表的表中 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16103009/

相关文章:

python - "admin"子目录触发(无意中)Django 管理页面

java - 更改了DB,更新了DB版本无法添加数据也无法不添加数据

python - python正则表达式中的特殊字符问题

python - 正则表达式 - 连字符之间的匹配数字

Mysql - 从表 2 上的 SELECT 中插入表 1,表 1 上的 WHERE NOT EXIST

Python Flask-SQLAlchemy查询超时错误

python - Sqlalchemy 覆盖关联表中的字段

python - 使用 SqlAlchemy 和 Alembic 创建部分索引

python - 如何让敌人跟随pygame中的玩家?

java - SQL 将日期插入数据库