У нас есть модель Person
from project.model import User
class Person(Entity, PersonHook):
...
@property
def user_name(self):
u = User.get(self.user_id)
return u.user_name if u else ""
Когда мы делаем большой запрос для Person и обращаемся к Person.user_name, он создает оператор выбора для каждого отдельного человека из таблицы User.
Можно ли одновременно загрузить два объекта «Человек» и «Пользователь»?
В нашем проекте используется старый и устаревший декларативный слой Elixir для SQLAlchemy.
В БД у них есть отношения User.user_id и Person.person_id. Я пробовал несколько форм отношения sqlalchemys.
user = relationship('User', primaryjoin='foreign(Person.user_id) == User.user_id')
user = relationship('User', foreign_keys=[user_id], primaryjoin = 'User.user_id == Person.user_id')
Но все, что я получаю, это <RelationshipProperty at 0x7f8fdd5ee5a0; no key>
Пожалуйста, прочтите описания тегов перед их добавлением. эликсир не имеет отношения к этому вопросу.
Вы правы @mudasobwa. Я немного устал и должен был объяснить, что я пробовал до сих пор. В БД у них есть отношения User.user_id и Person.person_id. Я пробовал несколько форм отношений sqlalchemys user = relationship('User', primaryjoin='foreign(Person.user_id) == User.user_id')
user = relationship('User', foreign_keys=[user_id], primaryjoin = 'User.user_id == Person.user_id')
, но все, что я получил, это <RelationshipProperty at 0x7f8fdd5ee5a0; нет ключа>
Я не знаю об Elixir, но современный ORM SQLAlchemy имеет разные стратегии загрузки для отношений, например объединенная загрузка, загрузка подзапроса и т. д., которые автоматически предварительно выбирают связанные объекты для вас.