[英]SQLAlchemy mapping many-to-many join table to list of keys
我有兩個具有多對多關系的表:
purchase_order = Table(
"purchase_order",
metadata,
Column("name", String, nullable=False, primary_key=True),
...
)
shipment = Table(
"shipment",
metadata,
Column("identifier", String, nullable=False, primary_key=True),
)
shipment_po = Table(
"shipment_po",
metadata,
Column(
"shipment_identifier",
String,
ForeignKey("shipment.identifier"),
nullable=False,
primary_key=True,
),
Column(
"purchase_order_name",
String,
ForeignKey("purchase_order.name"),
nullable=False,
primary_key=True,
),
)
我想像這樣將 map 轉換為 class :
class Shipment:
def __init__(
self,
identifier: str,
purchase_order_names: list[str],
):
...
(注意 purchase_order_names 只是 str 的列表,而不是某些PurchaseOrder
object 的列表。)
這樣我就可以像這樣創建它們(我有責任確保此處存在 purchase_order 行):
session.add(Shipment("my_shipment", purchase_order_names=["my_po_1", "my_po_2"]))
像這樣獲取:
session.query(Shipment).filter_by(identifier="my_shipment").one()
並像這樣更新:
shipment.purchase_order_names.append("my_po_3")
這支持嗎?
您可以通過向 Shipment 添加一個驗證器來執行此操作,該驗證器PurchaseOrder from the provided name
:
from sqlalchemy import orm
class Shipment:
...
@orm.validates('purchase_orders')
def validate_purchase_orders(self, key, purchase_order):
return PurchaseOrder(name=purchase_order)
如果您需要更多控制權,您可以創建自定義集合 class 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.