1

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

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

  1. 教练:
    • ID
    • 姓名
    • 电话
    • 电子邮件
  2. 技术:
    • ID
    • 技术名称
  3. 断言:
    • ID
    • trainer_id
    • 技术_id

任何人都可以帮助我如何将上述表格定义转换为具有适当关系的模型吗?

4

1 回答 1

3

你想要的是多对多的关系。Flask-SQLAlchemy 文档在此处提供了一个示例。

您有一个将它们链接在一起的表格的正确想法,但您实际上并不需要其中的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)

所以现在您可以添加培训师和技术人员,然后根据需要分配它们:

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)

或其中的任何组合。

于 2013-06-21T20:19:51.720 回答