![](/img/trans.png)
[英]Cannot define inter dependent relationships among models using SQLAlchemy
[英]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.