将 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/