Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy修订版数据库设计_Python_Sqlalchemy - Fatal编程技术网

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