我如何定义我的模型在烧瓶中的关系

时间:2013-06-21 09:05:54

标签: orm flask models relationship flask-sqlalchemy

我是新手,ORM技术正在为我的学习做一个示例项目

在我的应用程序中,培训师可以教授一种或多种技术,因此我将我的表定义为吼叫

  1. 师:
    • ID
    • 名称
    • 电话
    • 电子邮件
  2. 技术:
    • ID
    • tech_name
  3. 断言:
    • ID
    • trainer_id
    • technology_id
  4. 并且任何人都可以帮助我如何将上面的表定义转换为具有适当关系的模型

    提前致谢

1 个答案:

答案 0 :(得分:3)

你想要的是多对多的关系。 Flask-SQLAlchemy文档提供example of that here.

你有一个正确的想法,有一个表将它们链接在一起,但你真的不需要id列,下面是弯曲到你的模型的例子。

technologies = db.Table('technologies',
    db.Column('trainer_id', db.Integer, db.ForeignKey('trainer.id')),
    db.Column('tech_id', db.Integer, db.ForeignKey('tech.id'))
)

class Trainer(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    phone = db.Column(db.String)
    email = db.Column(db.String)
    technologies = db.relationship('Tech', secondary=technologies,
        backref=db.backref('trainers', lazy='dynamic'))

class Tech(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)

现在您可以添加Trainers和Techs,然后根据需要分配它们:

nano_tech = Tech(name='Nano')
mega_tech = Tech(name='Mega')
bob = Trainer(name='Bob', email='Whatever', technologies=[nano_tech, mega_tech])

或者您可以将现有技术添加到现有培训师

trainer = Trainer.query.filter_by(name='Alice').first()
tech = Tech.query.filter_by(name='Super').first()
trainer.technologies.append(tech)

或其中的任何组合。