python - 为 SQL Alchemy 多对多关系创建 ID
问题描述
对于我正在制作的口袋妖怪社交媒体式网络应用程序,我有多对多的关系......
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
groups = relationship('Group', secondary ='link', back_populates="users")
# a bunch of fields
class Group(db.Model):
id = db.Column(db.Integer, primary_key=True)
users = relationship('User', secondary ='link', back_populates="groups")
#a bunch of fields
#this class links the users and groups to form the many to many relationship
class Link(db.Model):
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
group_id = db.Column(db.Integer, db.ForeignKey('group.id'), primary_key=True)
group = db.relationship(Group, backref="link")
user = db.relationship(User, backref="link")
#here are fields I'm storing inside the link (Not sure if this is the right way)
status = db.Column(db.Integer, default=2) #owner = 0, member = 1, spectator = 2
这一切对我来说都很好,但现在我试图在链接中存储另一个类,这给我带来了问题
class Link(db.Model):
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
group_id = db.Column(db.Integer, db.ForeignKey('group.id'), primary_key=True)
group = db.relationship(Group, backref="link")
user = db.relationship(User, backref="link")
pokemon = db.relationship('Pokemon', backref='link', lazy=True)
class Pokemon(db.Model):
id = db.Column(db.Integer, primary_key=True)
pokemon = db.Column(db.String(32), index=True)
link_id = db.Column(db.Integer, db.ForeignKey('link.id'))
我的问题是,现在我需要 Link 模型的 ID,但我无法弄清楚如何做到这一点。它不会自动为我生成链接 ID,因为我已经拥有用户和组的另外两个主键。我知道我每次都可以手动设置它,但我需要为我的网络应用程序自动设置。我尝试研究自增字段,但我要么使用不正确,要么也不可行。我对数据库很陌生,所以如果这是一个不好的问题,我很抱歉,但如果我能得到任何帮助,我将不胜感激!
解决方案
您好,欢迎来到 StackOverflow!
我认为您可以像为其他模型一样添加一个 id 字段,例如:
class Link(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
group_id = db.Column(db.Integer, db.ForeignKey('group.id'), primary_key=True)
group = db.relationship(Group, backref="link")
user = db.relationship(User, backref="link")
现在,如果你想让它坚持下去,你将不得不迁移你的数据库。 Flask-Migrate是一个不错的选择。
顺便说一句,您正在实施的关系不是多对多,而是一对多。
您需要添加一个辅助表来建立链接和口袋妖怪表之间的关系。本页末尾的更多信息:https ://flask-sqlalchemy.palletsprojects.com/en/2.x/models/
希望它有所帮助!
推荐阅读
- c - 将 uint8_t 放入 uint64_t
- shopify - 新注册的用户在 Shopify 中被重定向
- css - rake assets:precompile > Sass::SyntaxError: Invalid CSS after "padding": expected ";", was ":20px;"
- c# - 如何在一次调用 Azure 密钥保管库中获取所有机密
- java - GIF 图像在我的应用程序中不起作用
- microservices - 刷新没有队列的 Spring Cloud Config
- c# - 将 SelectedItem 传递给 DataTemplate 中 UserControl 的 ViewModel
- python - 在 txt.file 中使用 3 列的 edgelist
- node.js - 从 NodeJS 到 App 引擎的 Google Cloud 构建
- laravel - 从数据库传递模板时变量不呈现