如何访问 SQLAlchemy 中关系的键列表?

how to access list of keys for a relationship in SQLAlchemy?

这是我目前的代码。我有一个 table,一对多关系运行良好。我想访问关系中的键列表:我可以使用专用查询来做到这一点,但我宁愿坚持声明逻辑并有一个像 order_ids 这样的字段,它从订单“映射”到它们的 ID .有可能还是我必须写一个专用的select?实现这一目标的最简洁方法是什么?

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")

您已经用

定义了从 Delivery 到 Order 的关系
orders = sa.orm.relationship("Order", lazy="subquery")

您可以使用它来访问 Delivery with

实例上的订单 ID
order_ids = [order.id for order in delivery.orders]

如果您真的希望它看起来像 Delivery 对象上的一个字段,您可以使用 @property 装饰器,并通过 deliver.order_ids:

访问它
class Delivery(Base):
    ...
    @property
    def order_ids(self) -> List[int]:
        return [order.id for order in self.orders]