SQLAlchemy - запрос нескольких таблиц и возврат вложенных объектов - PullRequest
0 голосов
/ 25 марта 2019

Предположим, у нас есть простые отношения один-ко-многим между Компанией и Сотрудником, есть ли способ запросить все компании и иметь список сотрудников в атрибуте каждой компании?

class Company(Base):
    __tablename__ = 'company'

    id = Column(Integer, primary_key=True)
    name = Column(String)


class Employee(Base):
    __tablename__ = 'employee'

    id = Column(Integer, primary_key=True)
    first_name = Column(String)
    last_name = Column(String)
    company_id = Column(Integer, ForeignKey(Company.id))

Я ищу что-то вроде этого:

>>> result = db.session.query(Company).join(Employee).all()
>>> result[0].Employee
[<Employee object at 0x...>, <Employee object at 0x...>]

Размер результата должен совпадать с количеством строк в таблице компании.

Я попробовал следующее, и оно дает кортеж объектов (что имеет смысл) вместо красивой родительской / дочерней структуры:

>>> db.session.query(Company, Employee).filter(Company.id = Employee.company_id).all()

Нетрудно преобразовать это в желаемую структуру объекта, но я просто хотел посмотреть, есть ли ярлык.

1 Ответ

0 голосов
/ 26 марта 2019

Вы можете сделать что-то вроде этого:

class Company(Base):
    __tablename__ = 'company'

    id = Column(Integer, primary_key=True)
    name = Column(String)

    employees = db.session.query(Company, Employee).filter(Company.id = self.id).all()
    self.employee_list = ['{0} {1}'.format(c.first_name, c.last_name) for c in employees]

Тогда вы можете получить доступ к имени сотрудника с помощью Company.employee_list[0]

...