SQLAlchemy,使用与多个表相同的模型

Ped*_*eck 7 python sqlalchemy

我有一个特定实体的数据,这些实体在多个相同的表中分区,通常按时间顺序或按数字范围分隔.例如,我可能有一个名为mytable的表用于当前数据,mytable_2013用于去年的数据,mytable_2012等等.

只写当前表.其他人只是咨询.使用SQLAlchemy,有什么方法可以指定要在使用声明性模型时查询的表吗?

vik*_*kin 5

使用mixins并通过对象属性更改表名称。

class Node(Base):
  __tablename__ = 'node'
  nid = Column(Integer, primary_key=True)
  uuid = Column(String(128))
  vid = Column(Integer)

class Node1(Node):
  __tablename__ = 'node_1'

class Node2(Node):
  __tablename__ = 'node_2'
Run Code Online (Sandbox Code Playgroud)

  • 不再工作,产生`NoForeignKeysError(“找不到'Node和'Node1'之间的任何外键关系。”,) (4认同)
  • 答案是正确的,代码不是(或不再是;-))。通过以下方式定义 mixin:a) 将“Node”类复制为“class NodeMixin(object):”,然后是“Node”类的列定义**但没有**“__table_name__”属性,b) for `Node1` 和 `Node2` 继承自 mixin 和 `Base`,例如 `class Node1(NodeMixin, Base): __tablename__ = "node_1"`。请参阅:https://docs.sqlalchemy.org/en/14/orm/declarative_mixins.html?highlight=mixin#mixing-in-columns (4认同)

van*_*van 5

根据要求,重新发布为答案:

请查看参考资料部分中在 SQLAlchemy 中映射大量相似表的Concrete Table Inheritance答案。
在您的情况下,您MyTable只能在使用当前数据时进行查询,并在需要整个历史记录时对所有表进行多态搜索。