我有一个类继承方案,如http://docs.sqlalchemy.org/en/latest/orm/inheritance.html#joined-table-inheritance中所示
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
type = Column(String)
__mapper_args__ = {'polymorphic_on': type}
class Child(Parent):
__tablename__ = 'child'
id = Column(Integer, ForeignKey('parent.id'), primary_key=True)
__mapper_args__ = {'polymorphic_identity': 'child'}
我希望能够使用Parent
(类似于Parent(type='child')
)的构造函数创建{
这可能吗?这是个好主意吗?在
问题是,当使用sqlalchemy声明性映射时,会为每个类生成一个映射器。在
你要做的是创建一个Parent的实例,它将表现为Child的实例,这是你做不到的,至少在不使用hack的情况下。在
事实上(你必须经历重重考验),这不是个好主意。也许你根本不需要遗产?在
编辑
如果你不想有条件逻辑或查找,你必须根据用户输入选择一个类,你可以这样做
绝对不是个好主意。您可以使用一个单独的helper函数(一个工厂),而不是使用构造函数来进行一些破解:
另一个注意事项:对于
Parent
,我将为{'polymorphic_identity': 'parent'}
定义一个值。它比拥有None
要干净得多。在EDIT-1:使用构造函数
不是我推荐它,或者我真的知道我在这里做什么,但是如果您将下面定义的
^{pr2}$__new__
添加到Parent
类中:您可以使用两种旧方法(当没有
type=xxx
传递给__init__
时),也可以通过提供一个参数来执行您要求的操作:同样,我不确定所有的含义,特别是因为sqlalchemy还覆盖了创建例程并使用了它自己的元类。
相关问题 更多 >
编程相关推荐