gpt4 book ai didi

python - 组合非唯一外键来创建主键?

转载 作者:行者123 更新时间:2023-12-04 08:19:23 26 4
gpt4 key购买 nike

我正在尝试在 SQLAlchemy 中创建一个表,它将连接一部电影和一个类别并给它一个分数(惊悚类中的闪灵可能得分为 700,而戏剧类中的闪灵可能得分为 540 等) .
这意味着该表将包含许多对 The Shining 的引用和许多对 Thriller 的引用,但只有一种情况是 The Shining 和 Thriller 的组合,其中也包含 700 的分数。这张图片很好地解释了这一点。 enter image description here
Category 和 Movie 是它们自己的类。
所以在寻找答案时我发现我可以有多个主键,但在这种情况下这不起作用,因为主键必须是唯一的,而电影 ID 和类别 ID 不是唯一的。
我找到了“复合键”这个词,它听起来像我正在寻找的东西,但在 SQLAlchemy 中证明它似乎并没有像我想象的那样做同样的事情。
我将如何制作一张符合我要求的 table ?又名图片中的“类别电影分数”?
我不只是创建一个作为主键的常规 ID 的原因是它永远不会被使用,我只是用电影和类别 ID 查询这个表。
提前致谢!

最佳答案

这可以通过 Association Object 解决.这是一个基于对象的多对多关系,能够存储额外的数据。

class Association(Base):
__tablename__ = 'association'
movie_id = Column(Integer, ForeignKey('movie.id'), primary_key=True)
category_id = Column(Integer, ForeignKey('category.id'), primary_key=True)
score = Column(Integer)
votes = Column(Integer)
category = relationship("Category", back_populates="movies")
movie = relationship("Movie", back_populates="categories")

class Movie(Base):
__tablename__ = 'movie'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(50))
categories = relationship("Association", back_populates="movie")

class Category(Base):
__tablename__ = 'category'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(50))
movies = relationship("Association", back_populates="category")
使用 sqlite_autoincrement=Truesqlite在数据库级别创建自动增量。
在将类别附加到电影之前,它需要与关联实例相关联:
# create movie, append a category via association
m = Movie()
a = Association(score=700, votes=0)
a.category = Category()
m.categories.append(a)

# iterate through category objects via association, including association
# attributes
for assoc in m.categories:
print(assoc.score)
print(assoc.category)

关于python - 组合非唯一外键来创建主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65563663/

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