使用 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(如果 experiment_types 中的条目类型 = 'type1' 有 id = 1,那么 experiments 中的条目 type = '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
我正在使用 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(如果 experiment_types 中的条目类型 = 'type1' 有 id = 1,那么 experiments 中的条目 type = '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