[英]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.