如何使用 SQLAlchemy 遍历关系表?

我正在学习 Flask,我想创建一个数据库,其中包含 3 个相互关联的表:

  1. 公司:有关我工作的公司的信息(编造:))

  2. 工作:关于我在每家公司担任的角色的信息

  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)

你能建议我一个聪明而优雅的方式来实现我的目标吗?提前致谢。


GCT1015
浏览 56回答 1
1回答

qq_遁去的一_1

如果我理解正确的话,您需要一份包含所有公司、工作和任务的列表。你可以通过查询你的数据库来获得这些(假设你已经插入了一些元组):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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python