Python 使用sqlalchemy在MySQL中定义关系

Python 使用sqlalchemy在MySQL中定义关系,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我正在使用sqlalchemy和MySQL构建一个数据库。我目前无法定义两个表之间的特定关系 class Experiment_Type(Base): __tablename__='experiment_types' id = Column(Integer, primary_key=True) type = Column(String(100)) class Experiments(Base): __tablename__ = 'experiments'

我正在使用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的值与基于类型的实验_类型中的id匹配(如果type='type1'的实验_类型中的条目id=1,那么type='type1'的实验中的条目应该具有sub_id=1)。我甚至不确定这是否是在这种情况下确定关系的最佳方法 所以任何建议都是欢迎的

当前错误消息如下:


sqlalchemy.exc.ArgumentError:在relationship 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