Как объединить данные из двух таблиц в SQLAlchemy? - PullRequest
0 голосов
/ 31 мая 2018

У меня есть 3 таблицы: Account, User и Organization.

  • Account состоит из id, name и organization_id.
  • User состоит из email и organization_id.
  • Organization состоит из id и name.

Каждый Account зарегистрирован вOrganization (через organization_id) и каждый User регистрируется на Organization.Задача состоит в том, чтобы отобразить все электронные письма (от User) до Account, соответствующего name, чей organization_id соответствует organization_id из User.

Вот мой код до сих пор:

class Account(db.Model):
    __tablename__ = "account"
    id = Column(Integer, primary_key=True)
    name = Column(String(50), index=True, unique=True)
    organization = Column(Integer, 
        ForeignKey("organization.id"),nullable=False, index=True)

class User(UserMixin, db.Model, RBACUserMixin):
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    organization = Column(Integer, ForeignKey("organization.id"), 
                      nullable=False, index=True)

class Organization(db.Model):
    __tablename__ = "organization"
    id = Column(Integer, primary_key=True)
    name = Column(String(512))
    users = relationship("User", backref="organizations")
    accounts = relationship("Account", backref="organizations")

1 Ответ

0 голосов
/ 31 мая 2018

Присоединение пользователя и учетной записи по идентификатору организации и фильтрация по имени:

db.session.query(User.email).\
    join(Account, Account.organization == User.organization).\
    filter(Account.name == 'some name')

Query.join() позволяет передавать произвольные выражения SQL в качестве предложения при использовании формы с двумя аргументами.

...