我正在尝试使用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。
我有什么遗失的吗?
答案 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)