0
我使用SQLAlchemy的,迁移来管理我的PostgreSQL数据库迁移时删除数据。我改变了__tablename__
一个模型,并在运行迁移数据库中更改了名称,但在表中的所有行被删除。如何在不删除数据的情况下重命名模型?SQLAlchemy的,迁移重命名模型
class Contract(db.Model):
__tablename__ = 'contract'
id = db.Column(db.Integer, primary_key=True)
is_valid = db.Column(db.Boolean, default=IS_VALID)
我从contract
重命名为contracts
,并得到此迁移:
def upgrade(migrate_engine):
pre_meta.bind = migrate_engine
post_meta.bind = migrate_engine
pre_meta.tables['contract'].drop()
post_meta.tables['contracts'].create()
它删除旧表,并创建一个新的。我从未检查过其他迁移脚本,因为它们始终运行而不丢弃数据。
请包括您的(相关)定义,包括您的更改之前和之后以及您使用的迁移。换句话说,产生[mcve]。这听起来像是你已经在类构造完成之后试图在实时系统中为模型类“__tablename__”属性分配一个新值。正如你已经想出的那样,这将不起作用,因为相应的'Table'对象是在类构造期间由Declarative构造的。重命名PostgreSQL中的表很简单,并且不需要任何下降:'ALTER TABLE the_table重命名为another_table;'。 –