python - 将 sqlalchemy.orm.relationship 添加到模型是否会更改内部数据库架构?

标签 python sqlalchemy database-migration

将 sqlalchemy.orm.relationship 添加到模型中是否会更改内部数据库架构?如果 ORM 映射中唯一更改的是添加的 orm.relationship,我是否需要添加数据库迁移脚本?

例如原始映射:

class Service(Base):
    __tablename__ = 'service'
    id = sql.Column(sql.String(64), primary_key=True)
    type = sql.Column(sql.String(255))
    extra = sql.Column(sql.Text())


class Endpoint(Base):
    __tablename__ = 'endpoint'
    id = sql.Column(sql.String(64), primary_key=True)
    legacy_endpoint_id = sql.Column(sql.String(64))
    interface = sql.Column(sql.String(8), primary_key=True)
    region = sql.Column('region', sql.String(255))
    service_id = sql.Column(sql.String(64),
                            sql.ForeignKey('service.id'),
                            nullable=False)
    url = sql.Column(sql.Text())
    extra = sql.Column(sql.Text())

修改后的映射:

@@ -3,6 +3,7 @@
     id = sql.Column(sql.String(64), primary_key=True)
     type = sql.Column(sql.String(255))
     extra = sql.Column(sql.Text())
+    endpoints = sql.orm.relationship("Endpoint")


 class Endpoint(Base):
@@ -16,4 +17,5 @@
                             nullable=False)
     url = sql.Column(sql.Text())
     extra = sql.Column(sql.Text())
+    service = sql.orm.relationship("Service")

进行上述更改后,我是否需要添加数据库迁移脚本?

最佳答案

我假设它是一对多关系(端点服务)

不,您不需要向迁移脚本添加任何内容,除非它是多对多关系。在这种情况下,可能需要关联表,但它(关联表)已经是模型的一部分。 http://docs.sqlalchemy.org/en/latest/orm/relationships.html#many-to-many

仅在一个模型中指定关系就足够了,对于另一个方向,您可以使用 backref 选项:

class Service(Base):
    __tablename__ = 'service'
    id = sql.Column(sql.String(64), primary_key=True)
    type = sql.Column(sql.String(255))
    extra = sql.Column(sql.Text())
    endpoints = sql.orm.relationship("Endpoint", backref="service")

现在这是一种双向关系。 现在端点对象上的.service将为您提供相应的服务对象。服务对象上的 .endpoints 将为您提供一组端点对象。如果是一对一,那么您可以在关系中指定 uselist=False ,然后您将返回标量而不是列表

关于python - 将 sqlalchemy.orm.relationship 添加到模型是否会更改内部数据库架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18023262/

相关文章:

database - 导入数据库后phpmyadmin md5解密问题

php - Phinx 迁移 - 整数列的显式长度

Python Tkinter : obtain tree node information

python - 在 Python 中将日期字符串列表重新格式化为日、月、年

python - 如果我需要自动递增 ID 但想要检查另一个字段上的重复项,如何定义模型?

python - 如何在 SQLAlchemy 中传递 `__table_args__` 中的位置参数和关键字参数

python - 使用 SQLAlchemy 创建 Pyramid Session 时出现 DetachedInstanceError

Python/Boto + AWS S3 版本控制 : how do I replace the current key with older version?

python - 为什么在使用 Flask-SQLAlchemy 填充数据库时出现 UnmappedInstanceError?

ruby-on-rails - Rails 迁移提示使用回形针的未定义方法 `attachment'