【发布时间】:2014-08-22 16:12:22
【问题描述】:
我拥有跨多个相同表分区的特定实体的数据,这些表通常按时间顺序或按数字范围分隔。例如,我可能有一个 mytable 用于当前数据的表,mytable_2013 用于去年的数据,mytable_2012 等等。
只有当前表被写入。其他的只是咨询。使用 SQLAlchemy,我有什么方法可以在使用声明性模型时指定要查询的表?
【问题讨论】:
-
请在
Concrete Table Inheritance部分查看stackoverflow.com/a/22825638/99594。我不想重新发布它作为答案,因为它很长。在您的情况下,您只能在处理当前数据时查询MyTable,并在查找所有历史记录时执行polymorphic搜索。 -
谢谢。我的情况更简单,它是水平分布的同一个实体,而不是由继承定义的多个实体。考虑到这一点,它似乎与下面@viktor.likin 回答的解决方案相同。
-
继承只是让 SA 跨多个表进行查询的一个技巧。但如果你不需要,viktor 的解决方案是完美的。请注意,如果您的表中有外键,则需要使用
declared_attr -
是的,我只是偶然发现了这一点。您能否澄清关于继承只是让 SA 跨多个表查询的技巧的观点。这适用于我正在做的水平分区吗? SQLAlchemy 自动执行 UNION?
-
是的,它可以与您正在进行的水平分区一起使用。诀窍是查询所有(或部分)(假)继承树
polymorphically。这就是说:如果您让 SA 认为所有这些表都是MyBaseTable的“子表”,并且您以多态方式执行查询,SA 将自动从所有这些表(mytable、mytable_2012等)中获取数据为你。事实上,SA 会自动执行UNION。
标签: python sqlalchemy