Orm 如何定义flask中模型的关系
我对flask和ORM技术不熟悉,我正在做一个样本项目供我学习 在我的应用程序中,培训师可以教授一种或多种技术,因此我将我的表格定义为Orm 如何定义flask中模型的关系,orm,flask,models,relationship,flask-sqlalchemy,Orm,Flask,Models,Relationship,Flask Sqlalchemy,我对flask和ORM技术不熟悉,我正在做一个样本项目供我学习 在我的应用程序中,培训师可以教授一种或多种技术,因此我将我的表格定义为 培训师: 身份证 名字 电话 电子邮件 技术: 身份证 技术单位名称 断言: 身份证 培训师id 技术部 有谁能帮我把上面的表定义转换成具有适当关系的模型吗 提前感谢您想要的是多对多关系。Alchemy文档提供了一个 关于使用一个表将它们链接在一起,您的想法是正确的,但实际上并不需要其中的id列,下面是适用于您的模型的示例 technologies
- 身份证
- 名字
- 电话
- 电子邮件
- 身份证
- 技术单位名称
- 身份证
- 培训师id
- 技术部
提前感谢您想要的是多对多关系。Alchemy文档提供了一个 关于使用一个表将它们链接在一起,您的想法是正确的,但实际上并不需要其中的
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)
或者其中的任何组合。谢谢你的回答:)我需要在创建培训师记录时添加技术??你不必,我将添加一个示例如何根据技术检索培训师信息多种方法,比如说你已经有了一个技术对象
nano=tech.query.filter_by(name='nano')。first()
只需执行trainers=nano.trainers
即可找到所有培训师。或者您可以同时进行筛选,如trainers=Trainer.query.filter(Trainer.technologies.any(name='Nano').all()
或通过加入技术表trainers=Trainer.query.join(Trainer.technologies).filter(Tech.name='Nano').all()