python - 使用 sqlalchemy 在 MySQL 中定义关系

标签 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'

    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 相匹配(如果 experiment_types 中的条目类型 = 'type1' 的 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

关于python - 使用 sqlalchemy 在 MySQL 中定义关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30130933/

相关文章:

python - 基础 Python : Rank items in list

python - 组合索引操作时查看和复制与 NumPy 数组的混淆

php - 如何制作社交网络徽章?

php - 检查时间是否等于带有持续时间的时间

mysql - 如何在 MySQL 中收缩/清除 ibdata1 文件

python - 使用 pyodbc 导致错误 : Data source name not found and no default driver specified

Python 调度持久化

python - django-filter 使用分页

python - 将 contains_eager 与过滤器一起使用,但不过滤掉没有匹配子代的父代

postgresql - 理解 Postres 死锁