我有问题。看下面,我需要属性' pricing_item'成为3个不同的班级之一。但是对于sqlalchemy,我只知道如何与另一个班级建立关系。如何在不使用继承的情况下与多个类建立关系?实现这一目标的最佳方法是什么?
最后,我想了解sqlalchemy中创建包含多个类的列表的最佳方法,这些内容在python中是微不足道的,但是表格很难实现这一功能。
感谢。
class QuoteItem(Base, DataObject):
__tablename__ = 'quote_item'
uuid = Column(String, primary_key=True)
quote_id = Column(String, ForeignKey('quote.uuid'))
quote_template = relationship('Quote')
position = Column(Integer)
quantity = Column(Integer)
priced_item = relationship( ***** HERE IS MY ISSUE *****)
discriminator = Column('type', String)
__mapper_args__ = {
'polymorphic_identity': 'quote_item',
'polymorphic_on': discriminator
}
def __init__(self, quote, quantity, priced_item):
"""
:type quote: Quote
:type quantity: int
:type priced_item: AbstractPart | AbstractLabor | AbstractService
"""
DataObject.__init__(self)
self.quote = quote
self.quantity = quantity
self.price_item = priced_item
答案 0 :(得分:0)
我认为这里的问题不是sqlalchemy,而是实际上是数据库结构。
首先想象一下,你只使用SQL。这些数据如何在数据库中表示?
"引用项目"之间的关系和"定价项"是一对多,对吧?一个"引用的项目"有许多"定价商品"。
为了能够在数据库中链接它们,您必须为"定价项目#34;创建一些公共表格,例如:
quoted_item_id
每个项目都有一个priced_type_one
---------------
item_id specific_data1 specific_data2
1 one two
priced_type_two
---------------
item_id specific_dataX specific_dataY
2 55 66
,因此每个引用的项目都与许多定价项目有关系。
然后,您可以为不同类型的定价商品添加其他表格(item_id可以是主键):
SoapObject.setInnerText("...");
等等。
上面是多表继承,你也可以使用单表继承(所有价格项目都有一个大表),我认为其他一些变种也是可能的。
一旦您决定如何在数据库级别执行此操作,您可以转到sqlalchemy并支持此类模式,请查看文档中的Mapping Class Inheritance Hierarchies。