Python SQLAlchemy修订版数据库设计
我必须实现以下需求:存储“页面”及其“修订”。比如: 我希望能够透明地获取页面及其内容,如:Python SQLAlchemy修订版数据库设计,python,sqlalchemy,Python,Sqlalchemy,我必须实现以下需求:存储“页面”及其“修订”。比如: 我希望能够透明地获取页面及其内容,如: page = session.query(Page).filter(Page.page_id == 42).one() page.name page.content 我读过书,但我不知道我是否不能用继承来做到这一点 有可能做那样的事吗?怎么做?您上面的ORM定义无效。尝试运行此代码时出现的“继承”错误具有误导性。您的示例与继承无关,您不需要它。您试图建模的是页面(一)和修订版(多)之间的简单一对多关
page = session.query(Page).filter(Page.page_id == 42).one()
page.name
page.content
我读过书,但我不知道我是否不能用继承来做到这一点
有可能做那样的事吗?怎么做?您上面的ORM定义无效。尝试运行此代码时出现的“继承”错误具有误导性。您的示例与继承无关,您不需要它。您试图建模的是页面(一)和修订版(多)之间的简单一对多关系。您的定义中的主要问题:
\uuuu tablename\uuuu
修订版
表格缺少对页面的引用
(页面id
)页面
关系定义不正确autoincrement
,因此您不必生成主键):
我将研究“类型2数据仓库”。基本上保持有效开始日期和有效结束日期,最新的有效结束日期为空。问题代码在这里说明问题。我为将来的读者编辑它。你的回答不能解决我的问题:我的问题不够清楚?我可以尝试更新它。
page = session.query(Page).filter(Page.page_id == 42).one()
page.name
page.content
class Page(Base):
__tablename__ = 'Page'
page_id = Column(Integer, primary_key=True, autoincrement=True)
class Revision(Base):
__tablename__ = 'Revision'
revision_id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(32))
content = Column(String(32))
page_id = Column(Integer, ForeignKey('Page.page_id'))
page = relationship('Page', uselist=False, backref='revisions')
page = Page()
first_revision = Revision(name='first_revision', content='foo', page=page)
second_revision = Revision(name='second_revision', content='bar', page=page)
session.add_all([page, first_revision, second_revision])
session.flush()
session.commit()
for rev in page.revisions:
print rev.revision_id, rev.name, rev.content, rev.page_id