使用SQLAlchemy连接返回单一结果集

0 投票
1 回答
33 浏览
提问于 2025-04-12 20:35

在我的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)

结果会以一个包含两个对象的元组返回:(<User>, <Department>)

(如果我再联接一个对象,比如公司,那么结果将以三个元组返回:(<User>, <Department>, <Company>)。)

有没有办法让我返回的结果是一个单一的对象,而不是元组,比如:('user_id1', 'first_name1', 'last_name1', 'department_name1'), ('user_id2', 'first_name2', 'last_name2', 'department_name2')

1 个回答

0

看起来解决办法其实很简单。

我修改了查询,专门选择需要的字段,而不是把整个对象都选出来:

db.session.query(User.id, User.first_name, User.last_name,  Department.name).join(Department, Department.id == User.department_id, isouter=True)

撰写回答