在我的 Flask 应用程序中,我想创建一个联接查询并使用 SQLAlchemy 返回单个(平面)结果集。
简单来说,我在
models.py
文件中创建了两个表:
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
first_name = db.Column(db.String(120), nullable=False)
last_name = db.Column(db.String(120), nullable=False)
department_id = db.Column(db.Integer)
date_added = db.Column(db.DateTime(timezone=True))
class Department(db.Model):
__tablename__ = 'department'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(120), nullable=False)
date_added = db.Column(db.DateTime(timezone=True))
在我的应用程序中,我创建以下查询:
from app import app, db
from app.models import User, Department
...
@app.route("/index")
def index():
results = db.session.query(User, Department).join(Department, Department.id == User.department_id, isouter=True)
结果以包含 2 个对象的元组形式返回:
(<User>, <Department>)
。
(如果我要加入另外 1 个对象,例如 Company,结果将以 3 个元组返回
(<User>, <Department>, <Company>)
。)
有什么方法可以在不使用元组的情况下以单个对象返回结果:
('user_id1', 'first_name1', 'last_name1', 'department_name1'), ('user_id2', 'first_name2', 'last_name2', 'department_name2')
。
看来解决办法很简单。
我修改了查询以专门选择所需字段而不是整个对象:
db.session.query(User.id, User.first_name, User.last_name, Department.name).join(Department, Department.id == User.department_id, isouter=True)