Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.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,我将特定实体的数据划分到多个相同的表中,通常按时间顺序或数字范围分隔。例如,对于当前数据,我可能有一个名为mytable的表;对于去年的数据,我有一个名为mytable_2013的表;对于2012年的数据,我有一个名为mytable_2012的表,等等 只有当前表被写入。其他的只是咨询。使用SQLAlchemy,在使用声明性模型时,有没有办法指定要查询的表?使用mixin并通过对象属性更改表名 class Node(Base): __tablename__ = 'node' nid =

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


只有当前表被写入。其他的只是咨询。使用SQLAlchemy,在使用声明性模型时,有没有办法指定要查询的表?

使用mixin并通过对象属性更改表名

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'
根据要求,重新发布作为答复:

请在
具体表继承部分查看此答案。

在您的情况下,您只能在处理当前数据时查询
MyTable
,并在需要整个历史记录时对所有表进行多态搜索。

请查看
具体表继承
部分。我不想把它作为一个答案重新发布,因为它相当长。在您的情况下,您可以仅在处理当前数据时查询
MyTable
,在查找所有历史记录时执行
polymorphic
搜索。谢谢。我的例子更简单,它是水平分布的同一个实体,而不是继承定义的多个实体。考虑到这一点,它似乎与下面的@viktor.likin答案相同。继承只是让SA跨多个表查询的一个技巧。但如果你不需要,维克多的解决方案是完美的。请注意,如果表中有外键,则需要使用
声明的\u attr
是的,我刚刚偶然发现了这一点。您能否澄清一下,继承只是让SA跨多个表查询的一个技巧。这对我正在做的水平分区有效吗?SQLAlchemy会自动进行联合吗?是的,它可以与您正在进行的水平分区一起工作。诀窍是以多态方式查询所有(或部分)假继承树
。这就是说:如果您让SA认为所有这些表都是
MyBaseTable
的“子表”,并且您以多态方式执行查询,SA将自动为您从所有这些表(
mytable
mytable_2012
)中获取数据。事实上,SA会自动执行一个
联合
。这种方法没有公认的答案复杂。这里有一个指向使用类似方法的配方的链接:不再工作,产生
NoForeignKeysError(“在'Node'和'Node1'之间找不到任何外键关系”)