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

问题描述 投票:0回答:3

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

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

python sqlalchemy
3个回答
10
投票

使用 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'

5
投票

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

请查看Concrete Table Inheritance部分中的

在 SQLAlchemy 中映射大量类似表
的答案。
在您的情况下,您只能在使用当前数据时查询
MyTable
,并在需要整个历史记录时对所有表进行多态搜索。


0
投票

SQLAlchemy 2.0 更新

语法略有变化。最重要的是,

mixin
类不再继承于
Base
SQLAlchemy 2.0)。

class MultiTableMixin:
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[Optional[str]]


class MyModel(MultiTableMixin, Base):
    __tablename__ = "table1"

class MyModel(MultiTableMixin, Base):
    __tablename__ = "table2"
© www.soinside.com 2019 - 2024. All rights reserved.