как получить доступ к списку ключей для отношений в SQLAlchemy?

#python #sqlalchemy

Вопрос:

На данный момент это мой код. У меня есть таблица с отношениями «один ко многим», которая отлично работает. Я хотел бы получить доступ к списку ключей в отношениях: я могу сделать это с помощью специального запроса, но я бы предпочел придерживаться декларативной логики и иметь такое поле, order_ids которое «сопоставляет» заказы с их идентификаторами. Возможно ли это или мне нужно написать специальный выбор? Каков самый чистый способ достичь этого?

 class Delivery(Base):  __tablename__ = "delivery"  ...  id = sa.Column(GUID, primary_key=True, default=GUID_DEFAULT_SQLITE)  orders = sa.orm.relationship("Order", lazy="subquery")  order_ids = ???  class Order(Base):  __tablename__ = "order"  ...   id = sa.Column(GUID, primary_key=True, default=GUID_DEFAULT_SQLITE)  delivery_id = sa.Column(sa.ForeignKey("delivery.id"), nullable=True)  delivery = sa.orm.relationship("Delivery", foreign_keys=[delivery_id], back_populates="orders")  

Ответ №1:

Вы уже определили взаимосвязь от доставки до заказа с

 orders = sa.orm.relationship("Order", lazy="subquery")  

Вы можете использовать это для доступа к идентификаторам заказов в экземпляре доставки с помощью

 order_ids = [order.id for order in delivery.orders]  

Если вы действительно хотите, чтобы это выглядело как поле в объекте доставки, вы можете использовать @property декоратор и получить к нему доступ через deliver.order_ids :

 class Delivery(Base):  ...  @property  def order_ids(self) -gt; List[int]:  return [order.id for order in self.orders]