我正在尝试修改pyramid_blogr示例。唯一最接近的质量检查线程是this one和该线程中提到的link。我经历了他们两个。我正在使用具体的继承,据我了解,将为每个模型创建单独的表。仍然,当我从第二个模型查询记录时,仍然出现错误,指出该模型确实具有诸如title或在TaggedBlogRecord中创建的列。
错误
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: ====> entries.created <======
[SQL: SELECT entrieslanguage.id AS entrieslanguage_id
FROM entrieslanguage ORDER BY entries.created DESC
LIMIT ? OFFSET ?]
示例代码如下
class BlogRecord(Base):
__tablename__ = 'entries'
id = Column(Integer, primary_key=True)
title = Column(Unicode(255), unique=True, nullable=False)
body = Column(UnicodeText, default=u'')
created = Column(DateTime, default=datetime.datetime.utcnow)
edited = Column(DateTime, default=datetime.datetime.utcnow)
class TaggedBlogRecord(BlogRecord):
__tablename__ = 'taggedentries'
__mapper_args__ = {'concrete':True}
id = Column(Integer, primary_key=True)
tags = Column(Unicode(255))
答案 0 :(得分:1)
仔细阅读https://docs.sqlalchemy.org/en/latest/orm/inheritance.html#concrete-table-inheritance(添加重点):
应注意两个关键点:
我们必须在每个子类上显式定义所有列,即使是 相同的名称。此处不会复制诸如Employee.name之类的列 到经理或工程师为我们映射的表中。
当工程师 和Manager类之间的继承关系是 员工,他们仍然不包括多态加载。意思是,如果 我们查询Employee对象,经理和工程师表不是 完全可以查询。