【问题标题】:Relationship between two tables one with 2 foreign keys in flask-sqlalchemyflask-sqlalchemy 中两个表之间的关系,其中一个具有 2 个外键
【发布时间】:2015-02-15 04:26:24
【问题描述】:

我有两个代表用户和消息的表格,如下所示:

class Users (db.Model):
    UserId = db.Column(db.INTEGER, primary_key=True,autoincrement=True)
    UserName = db.Column(db.String(25),nullable=False, unique=True)
    Email = db.Column(db.String,nullable=False,unique=True)

class Messages (db.Model):
    MessageId = db.Column(db.INTEGER,primary_key=True,autoincrement=True)
    SenderId = db.Column(db.INTEGER,db.ForeignKey('Users.UserId'),nullable=False)
    ReceiverId = db.Column(db.INTEGER,db.ForeignKey('Users.UserId'),nullable=False)
    Message = db.Column(db.String,nullable=False)

我想知道如果我想在用户类中编写以下内容:

db.relationship('Messages', backref='MessageSender',lazy='dynamic'#这个返回消息发送者。

db.relationship('Messages', backref='MessageReceiver', lazy='dynamic' #this 返回消息接收者。

我应该如何指定?这样我就可以反向引用两个外键?

提前致谢。

【问题讨论】:

    标签: python database sqlalchemy relationship flask-sqlalchemy


    【解决方案1】:

    以下应该可以:

    class Messages(db.Model):
        MessageId = db.Column(db.INTEGER, primary_key=True, autoincrement=True)
        SenderId = db.Column(db.INTEGER, db.ForeignKey('users.UserId'), nullable=False)
        ReceiverId = db.Column(db.INTEGER, db.ForeignKey('users.UserId'), nullable=False)
        Message = db.Column(db.String, nullable=False)
    
        # define relationships
        sender = db.relationship(Users, foreign_keys=[SenderId], backref='sent')
        receiver = db.relationship(Users, foreign_keys=[ReceiverId], backref='received')
    

    使用示例:

    u0 = Users(UserName='Lila')
    u1 = Users(
        UserName='John',
        sent=[Messages(Message='hi', receiver=u0)]
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 2020-12-23
      相关资源
      最近更新 更多