繁体   English   中英

为 SQL Alchemy 多对多关系创建 ID

[英]Creating ID for a SQL Alchemy Many to Many relationship

对于我正在制作的口袋妖怪社交媒体式 web 应用程序,我有多对多的关系......

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 ,这给我带来了问题

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 model 的 ID,但我无法弄清楚如何做到这一点。 它不会自动为我生成链接 ID,因为我已经拥有用户和组的另外两个主键。 我知道我每次都可以手动设置它,但我需要为我的 web 应用程序自动设置它。 我尝试研究自增字段,但我要么使用不正确,要么也不可行。 我对数据库很陌生,所以如果这是一个不好的问题,我很抱歉,但如果我能得到任何帮助,我将不胜感激!

您好,欢迎来到 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/

希望它有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM