繁体   English   中英

使用sqlalchemy在MySQL中定义关系

[英]Using sqlalchemy to define relationships in MySQL

我正在使用sqlalchemy和MySQL建立数据库。 我目前在定义两个表之间的特定关系时遇到麻烦。

class Experiment_Type(Base):
    __tablename__='experiment_types'

    id = Column(Integer, primary_key=True)
    type = Column(String(100))


class Experiments(Base):
    __tablename__ = 'experiments'

    id = Column(Integer, primary_key=True)
    type = Column(String(100))
    sub_id = Column(Integer, ForeignKey('experiment_types.id'))

    experiments = relationship('Experiments',
    primaryjoin="and_(Experiment_Type.id == Experiments.sub_id,
    'Experiments.type' == 'Experiment_Type.type')",
    backref=backref('link'))

我想做的是在实验中让sub_id的值与基于类型的Experiment_types中的id相匹配(如果类型为'type1'的experiment_types中的项具有id = 1,那么在类型='type1'中的实验中的条目应具有sub_id = 1)。 我什至不确定这是否是在这种情况下定义关系的最佳方法,因此欢迎任何建议。

当前的错误信息是这样的:

sqlalchemy.exc.ArgumentError:在关系Experiments.experiments上找不到主连接条件'0 = 1'的任何相关外键列。 确保引用列与ForeignKey或ForeignKeyConstraint关联,或在联接条件中使用foreign()注释进行注释。

在关系数据库中建立关系的重点是不必在表之间重复数据。 只是做这样的事情:

class ExperimentType(Base):
    __tablename__='experiment_types'

    id = Column(Integer, primary_key=True)
    name = Column(String(100))


class Experiments(Base):
    __tablename__ = 'experiments'

    id = Column(Integer, primary_key=True)
    description = Column(String(100))
    type_id = Column(Integer, ForeignKey('experiment_types.id'))

    type = relationship("ExperimentType")

然后,如果您确实需要稍后显示实验类型的内容,则可以使用以下内容进行访问:

exp = session.query(Experiment).first()
print exp.type.name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM