Python 更改(删除列并更改多对多成员身份)FLASK中的SQLite后出错

Python 更改(删除列并更改多对多成员身份)FLASK中的SQLite后出错,python,sqlite,flask,dbmigrate,flask-migrate,Python,Sqlite,Flask,Dbmigrate,Flask Migrate,我的model.py中有一个用户和频道类。他们有很多对很多的关系。我决定删除User和channel之间的多对多关系,并添加Usertemp类和channel类之间的多对多关系 在此之后,我发布: flask db migrate flask db upgrade 但是,我收到SQLite无法执行这个操作的错误信息,考虑批量迁移。我看了其他熟悉的话题,比如 或 我在上述两个链接中都遇到了此代码: with app.app_context(): if db.engine.url.driv

我的model.py中有一个用户频道类。他们有很多对很多的关系。我决定删除Userchannel之间的多对多关系,并添加Usertemp类和channel类之间的多对多关系

在此之后,我发布:

flask db migrate
flask db upgrade

但是,我收到SQLite无法执行这个操作的错误信息,考虑批量迁移。我看了其他熟悉的话题,比如 或

我在上述两个链接中都遇到了此代码:

with app.app_context():
    if db.engine.url.drivername == 'sqlite':
        migrate.init_app(app, db, render_as_batch=True)
    else:
        migrate.init_app(app, db)
但是,可能还有更多的事情要做,因为我仍然收到SQLite错误

更多信息:查看迁移文件夹中的我的版本文件后,一些表的名称没有:

这是我的迁移文件的第一个版本,我使用批处理迁移来删除该列,我想是“无”造成了问题:

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.add_column('enroll', sa.Column('usertemp_id', sa.Integer(), nullable=True))
    op.drop_constraint(None, 'enroll', type_='foreignkey')
    op.create_foreign_key(None, 'enroll', 'usertemp', ['usertemp_id'], ['id'])
    with op.batch_alter_table('enroll') as batch_op:
        batch_op.drop_column('user_id')
然后,我在代码中添加了以下内容:

convention = {
    "ix": 'ix_%(column_0_label)s',
    "uq": "uq_%(table_name)s_%(column_0_name)s",
    "ck": "ck_%(table_name)s_%(constraint_name)s",
    "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
    "pk": "pk_%(table_name)s"
}

metadata = MetaData(naming_convention=convention)
db = SQLAlchemy(app, metadata=metadata)
然后运行flask db升级,但我再次收到错误: 以下是我更新的迁移版本:

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_constraint(None, 'enroll', type_='foreignkey')
    op.create_foreign_key(op.f('fk_enroll_usertemp_id_usertemp'), 'enroll', 'usertemp', ['usertemp_id'], ['id'])
    op.drop_column('enroll', 'user_id')
    op.create_unique_constraint(op.f('uq_user_name'), 'user', ['name'])
我怀疑为render_as_batch=true提供的解决方案可以解决这个问题,因为有些人已经发布了这个解决方案。但是,谁能解释一下如何将它添加到我的文件中,我应该在哪里添加它? 我怀疑它应该添加到env.py文件中。然而,之后我还应该改变什么? 正在添加上述代码(包括render_as_batch),以自行修复问题


如果有人能帮助我,我将不胜感激,因为现在,只要我犯了错误,我就会发出
db.drop_all()
并再次创建表,这是非常低效的

生成迁移脚本时,需要启用
render\u as\u batch=True
选项。谢谢。我是否只需要启用此功能并发布flask db migrate和flask db upgrade?是否需要命名约定或类似的东西。我指的是这里的文档是的,不幸的是,所有这些未命名约束的潜在问题都需要考虑。