gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:56:44 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com