python - SQLAlchemy joinload 与 backref 关系
问题描述
我有 3 个模型
class Item(Base):
__tablename__ = 'items'
auto_inc = Column(Integer, primary_key=True, nullable=False)
id = Column('item_id', String(50, "utf8_unicode_ci"), unique=True, nullable=False)
purchase_order = relationship('PurchaseOrder', back_populates='items')
class PurchaseOrder(Base):
__tablename__ = 'purchase_orders'
auto_inc = Column(Integer, primary_key=True, nullable=False)
id = Column('purchase_order_id', String(50, "utf8_unicode_ci"), unique=True, nullable=False)
items: List[Item] = relationship('Item', order_by='Item.auto_inc', back_populates='purchase_order')
user = relationship('User')
class User(Base):
id: str = Field(title="User ID")
first_name = Column(String(45, "utf8_unicode_ci"), index=True)
last_name = Column(String(45, "utf8_unicode_ci"), index=True)
假设我想从它的 id 中获取一个项目,我可能需要稍后访问 PurchaseOrder。
如果我这样查询:
item = session.query(Item).options(joinedload(Item.purchase_order).joinedload(PurchaseOrder.user)).get(item_id)
该项目有时会与里面的每个项目一起返回item.purchase_order.items
,但有时item.purchase_order.items
会返回 null。
如果我进行以下查询,它总是会返回里面的每个项目item.purchase_order.items
:
item = session.query(Item).options(joinedload(Item.purchase_order).joinedload(PurchaseOrder.user)).options(joinedload(Item.purchase_order).joinedload(PurchaseOrder.items)).get(item_id)
在这种情况下,这是进行查询的正确(也是最有效)的方式吗?
解决方案
推荐阅读
- javascript - 如何使用 vscode 重新排序参数?
- java - JHipster:没有身份验证的 Web 服务
- java - 试图在单独的行上打印字符串中的一个单词
- javascript - 云函数 onUpdate:无法读取未定义的属性“forEach”
- installation - ModuleNotFoundError:没有名为“google.colab”的模块
- python - 如何使用 sqlalchemy:filter_by - filter_by 不工作
- python - Python将项目添加到作为字典的字典值
- angular - 如何在 Angular 中使用 rxjs 检查输入属性?
- python - 如何在kivy中更改模板值
- dataframe - 按组计算唯一值的数量