gpt4 book ai didi

python - 将 SQLAlchemy 与复合主键和外键一起使用

转载 作者:行者123 更新时间:2023-12-05 07:44:13 25 4
gpt4 key购买 nike

我正在尝试使用声明性 SQLAlchemy (v1.1.5) 在两个表之间创建关系,其中表具有复合主键和外键。

这本质上是两个表之间经典的一对多关系,其中 Resource 定义父级,每个资源有多个段,在 Resourcesegment 表中定义。不同之处在于,我已将 VersionID 列添加到两个表中,因此我可以将数据库与多个版本的数据一起使用。这是简化的代码:

from sqlalchemy import Column, String, Integer, ForeignKeyConstraint
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship

Base = declarative_base()

class Resource(Base):
__tablename__ = 'resource'
VersionID = Column(String, primary_key=True)
ResourceID = Column(String, primary_key=True)
ResourceProperty = Column(String)
segments = relationship("Resourcesegment", back_populates="resource")

class Resourcesegment(Base):
__tablename__ = 'resourcesegment'
VersionID = Column(String, primary_key=True)
ResourceID = Column(String, primary_key=True)
Segment_Type = Column(String, primary_key=True)
Segment_Number = Column(Integer, primary_key=True)
Segment_Property = Column(String)
resource = relationship("Resource", foreign_keys=[VersionID, ResourceID], back_populates="segments")

__table_args__ = (ForeignKeyConstraint([VersionID, ResourceID], [Resource.VersionID, Resource.ResourceID]),)

我得到的错误信息是:

InvalidRequestError: Mapper 'Mapper|Resourcesegment|resourcesegment' has no property 'resource'

我已经为关系和外键尝试了许多不同的配置,但都没有成功。根据我在文档和各种 Stackoverflow 示例中的理解,这是我对什么应该起作用的最佳猜测。显然我错过了一些东西。

感谢任何帮助/建议/评论!

最佳答案

假设您正在尝试使用段 PK 作为资源的 FK,请尝试在 PK 属性定义上定义 FK,例如沿着:

class Resourcesegment(Base):
__tablename__ = 'resourcesegment'
VersionID = Column(String, ForeignKey(Resource.VersionID), primary_key=True)
ResourceID = Column(String, ForeignKey(Resource.ResourceID), primary_key=True)
Segment_Type = Column(String, primary_key=True)
Segment_Number = Column(Integer, primary_key=True)
Segment_Property = Column(String)
resource = relationship("Resource", back_populates="segments")

关于python - 将 SQLAlchemy 与复合主键和外键一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43051051/

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