我的特定实体的数据分布在多个相同的表中,通常按时间顺序或数字范围分隔。例如,我可能有一个名为 mytable 的表用于当前数据,一个 mytable_2013 用于去年的数据,mytable_2012 等等。
仅写入当前表。其他的只是咨询一下。使用 SQLAlchemy,有什么方法可以指定使用声明性模型时要查询的表吗?
使用 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'
根据要求,重新发布为答案:
请查看Concrete Table Inheritance
部分中的
在 SQLAlchemy 中映射大量类似表的答案。
MyTable
,并在需要整个历史记录时对所有表进行多态搜索。
语法略有变化。最重要的是,
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"