重命名模型时,SQLAlchemy-Migrate删除数据

Nur*_*jan 2 python sqlalchemy sqlalchemy-migrate

我正在使用SQLAlchemy-Migrate来管理PostgreSQL数据库的迁移。我更改__tablename__了模型的,并且运行迁移更改了数据库中的名称,但表中的所有行均被删除。如何重命名模型而不删除数据?

class Contract(db.Model):
    __tablename__ = 'contract'
    id = db.Column(db.Integer, primary_key=True)
    is_valid = db.Column(db.Boolean, default=IS_VALID)
Run Code Online (Sandbox Code Playgroud)

我将其从重命名为contractcontracts并进行以下迁移:

def upgrade(migrate_engine):
    pre_meta.bind = migrate_engine
    post_meta.bind = migrate_engine
    pre_meta.tables['contract'].drop()
    post_meta.tables['contracts'].create()
Run Code Online (Sandbox Code Playgroud)

它删除旧表并创建一个新表。我从未检查过其他迁移脚本,因为它们始终在不删除数据的情况下运行。

dav*_*ism 5

SQLAlchemy-Migrate不知道数据库中名为“ contract”的表与代码中名为“ contracts”的模型相同。它们是不同的名称,并且只进行简单的比较。这就是为什么您始终查看生成的迁移脚本以确保它们执行正确操作的原因。

SQLAlchemy-Migrate文档中,使用rename方法重命名表。

pre_meta.tables['contract'].rename('contracts')
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Alembic而不是SQLAlchemy-Migrate,则会发生相同的情况。使用rename_table方法。

op.rename_table('contract', 'contracts')
Run Code Online (Sandbox Code Playgroud)