考虑到这段代码(并使用SQLAlchemy 0.7.7):
class Document(Base):
__tablename__ = 'document'
__table_args__ = {
'schema': 'app'
}
id = Column(types.Integer, primary_key=True)
nom = Column(types.Unicode(256), nullable=False)
date = Column(types.Date())
type_document = Column(types.Enum('arrete', 'photographie',
name='TYPES_DOCUMENT_ENUM'))
__mapper_args__ = {'polymorphic_on': type_document}
class Arrete(Document):
__tablename__ = 'arrete'
__table_args__ = {
'schema': 'app'
}
__mapper_args__ = {'polymorphic_identity': 'arrete'}
id = Column(types.Integer, ForeignKey('app.document.id'), primary_key=True)
numero_arrete = Column(types.Integer)
date_arrete = Column(types.Date())
我可以很容易地内省在Arrete
类中定义的列的列类型:
Arrete.__table__.c['date_arrete'].type
但如果我想通过Arrete
类访问在Document
类中定义的列,则这不起作用。(如果我试图访问c['date']
,则返回KeyError)。
是否有方法获取列类型,而不管该列是在最终类中定义的还是在其父类中定义的?
你可以探索基类。。。
你需要abstract special directive或mixin pattern。
对于mixin,您可以使用以下内容:
共享的东西放在mixin中,非共享的东西放在子类中。
ORM允许您在继承模式中定义与两个表的连接相对应的类。这个结构是完全服务的,还可以用来查找基本的东西,比如列上的属性类型,非常直接:
请注意,这基本上与艰难通过
__bases__
的方法相同,只是您让Python的普通类机制来完成这项工作。相关问题 更多 >
编程相关推荐