python - 如何使用 SQLAlchemy 遍历关系表?
问题描述
我正在学习 Flask,我想创建一个数据库,其中包含 3 个表,它们之间是相关的:
- 公司:关于我工作的公司的信息(编造:))
- 工作:关于我在每家公司担任的角色的信息
- 任务:有关我在每家公司的每项工作中的任务的信息。
这是代码:
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///work_experience.db'
db = SQLAlchemy(app)
class Company(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
start_date = db.Column(db.DateTime, nullable=False)
end_date = db.Column(db.DateTime, nullable=False, default=None)
location = db.Column(db.String(20), nullable=False, default='N/A')
jobs = db.relationship('Job', backref='company_')
class Job(db.Model):
id = db.Column(db.Integer, primary_key=True)
position = db.Column(db.String(100), nullable=False)
start_date = db.Column(db.DateTime, nullable=False)
end_date = db.Column(db.DateTime, nullable=False)
company_id = db.Column(db.Integer, db.ForeignKey('company.id'))
tasks = db.relationship('Task', backref='job_')
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
description = db.Column(db.String(100), nullable=False)
start_date = db.Column(db.DateTime, nullable=False)
end_date = db.Column(db.DateTime, nullable=False)
job_id = db.Column(db.Integer, db.ForeignKey('job.id'))
db.create_all()
我的想法是有一个 for 循环(最终我会用 Jinja2 编写,但现在 python 代码很好),这样我就可以为每家公司打印我的工作和完成的任务。当然,我可以将所有数据放在一张表中,但我正在努力学习。
因此输出应该是这样的:
for company in Companies:
for job in Jobs:
for Task in Tasks:
print(company, job, task)
你能建议我一种聪明而优雅的方式来实现我的目标吗?提前致谢。
解决方案
如果我理解正确,您需要一份所有公司、工作、任务的列表。您可以通过查询数据库来获取这些信息(假设您已经插入了一些元组):
for c in Company.query.all():
print(c.name)
for r in c.roles:
print('\t',r.position)
for t in r.tasks:
print('\t\t',t.description)
推荐阅读
- macos - 无法在 Mac Mojave 上使用 opencv 访问相机
- c++ - 链表内的链表 - 节点无法初始化
- file - 如何在 wso2 esb 序列中获取文件上传时间
- r - 无法加载 CINNA 包
- php - Result displayed twice because of counter PHP
- php - 如何使用 Codeigniter 使用动态子域 - CPanel 通配符子域
- python - 从python Dict中删除项目给我错误
- javascript - React Native SectionList 在刷新时滚动到顶部
- php - 将一页重定向到 http 而不是 https
- c++ - vtkResliceImageViewer 图像质量问题