我试图通过SQLAlchemy库实现多态关联,并将其用于示例:
但有一点与我的情况不符。在示例中:创建Address对象,然后将其添加到Supplier或Customer(因此Address表对Supplier和Customer表具有多态外键,而Supplier和Customer对象对Address具有backref)。当Address对象添加到这些表时,SQLAlchemy会自动解决如何在表上分配Id的问题。然后,可以使用地址的“父”字段获取供应商或客户对象。
尽管在我的例子中,我需要首先创建Address对象,然后将一个对象分配给Address父对象(例如Company,例如它是Supplier和Customer)。
在我的案例中使用多态关联的示例:
engine = create_engine('sqlite://', echo=True)
Base.metadata.create_all(engine)
session = Session(engine)
address = Address(street='2569 west elm', city="Detroit", zip="56785")
cust = Customer(name="Tester")
supl = Supplier(company_name="Ace Hammers")
address.parent = supl
session.add_all([address])
session.commit()
但如果我尝试将此模式应用于我的案例而不进行修改,则会收到下一条错误消息:
Traceback (most recent call last): File "discriminator_on_related.py", line 131, in address.parent = supl File "C:\Python27\lib\site-packages\sqlalchemy-0.9.3-py2.7-win32.egg\sqlalchemy\ext\associationproxy.py", line 271, in __set__ setattr(obj, self.target_collection, creator(values)) TypeError: __init__() takes exactly 1 argument (2 given)
我应该如何修改这个模式以使其工作?
很抱歉,如果这是一个很小的问题(SQLAlchemy association_proxy对我来说像是某种魔法)。
对不起,所有在这个问题上有麻烦的人。也许答案对某人有用。答案实在太简单了。我的主要错误是在我的案例基础上使用了一个复杂的模式示例。要解决此任务,只需要在子任务上拆分它。因此,这项任务包括具有联接表的多态继承(使用SQLAlchemy很容易实现)和在公共(父)表上设置外键。下面是下一段代码:
相关问题 更多 >
编程相关推荐