使用相同的模型创建两个不同的表

时间:2017-02-07 15:54:01

标签: python postgresql sqlalchemy

我正在尝试使用SqlAlchemy创建两个表,在结构方面彼此相同,但名称不同。

表格如下(简化示例):

local unpackTable do 

local function unpackTable_( tab, i, ... )
  if i == 0 then return ... end
  return unpackTable_( tab, i-1, tab[i], ...)
end

unpackTable = function( tab )
  return unpackTable_(tab, #tab)
end

end

foo = {1, 2, 3}
print(unpackTable(foo))

为了给MyTableSecondary一个不同的名称,我认为我应该改变的是Base = declarative_base() class MyTable(Base, OperationsMixin): __tablename__ = 'the_table_name' colA = Column(BigInteger) colB = Column(TIMESTAMP(timezone=True)) class MyTableSecondary(MyTable): pass (甚至是__tablename____table__.name)。

但是,如果我这样做,我也会更改基类的值,因为所有这些都是类属性。

要解决此限制,我可以在这些行中向基类添加__table__.fullname

returnSecondary

但是,当我调用它时,它会为定义的第一列引发KeyError。

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:1)

你可以创建mixin

class MyTableMixin(object):
    colA = Column(BigInteger)
    colB = Column(TIMESTAMP(timezone=True))

class MyTable(MyTableMixin, Base):
    __tablename__ = 'the_table_name'

class MyTableSecondary(MyTableMixin, Base):
    __tablename__ = 'secondary_table'

请参阅this example

如示例所示,这也适用于一个表具有另一个表具有的列的超集的情况。 在这种情况下,您只需像往常一样添加新列:

class MyTableTertiary(MyTableMixin, Base):
    __tablename__ = 'tertiary_table'
    some_other_col = Column(Integer)