Flask SQLAlchemy关系

fre*_*row 4 python sqlalchemy flask

我在Flask和SQLAlchemy中有一个非常简单的模型,公司在玩火柴.匹配由主机和来宾定义.我不知道如何将主机和访客公司带到模板,我正在获取他们的ID.

代码是这样的:

class Company(db.Model):

    __tablename__ = 'companies'
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(64), unique = True)
    address = db.Column(db.String(120), unique = False)
    website = db.Column(db.String(100), unique = False)
    ...

class Match(db.Model):

    __tablename__ = 'matches'
    id = db.Column(db.Integer, primary_key = True)

    local_id =db.Column(db.Integer, db.ForeignKey('companies.id'))    
    guest_id = db.Column(db.Integer, db.ForeignKey('companies.id'))

    match_time = db.Column(db.DateTime())   # not important
Run Code Online (Sandbox Code Playgroud)

我希望能够在模板中执行以下操作:

{{ match.host.name }} - {{ match.guest.name }}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Nav*_*ava 7

你需要有foreignkey relationshipsqlalchemy启用访问.

例如,

解:

class Match(db.Model):
    __tablename__ = 'matches'

    id = db.Column(db.Integer, primary_key = True)

    local_id =db.Column(db.Integer, db.ForeignKey('companies.id'))    
    guest_id = db.Column(db.Integer, db.ForeignKey('companies.id'))

    local = db.relationship('Company', foreign_keys=local_id)
    guest = db.relationship('Company', foreign_keys=guest_id)

    match_time = db.Column(db.DateTime())   # not important
Run Code Online (Sandbox Code Playgroud)

这将解决您的问题.backref如果您需要,甚至可以使用关键字进行反向访问.

资源

http://docs.sqlalchemy.org/en/rel_0_8/orm/relationships.html