flask-migrate 以更改 sqlite 列名称

问题描述 投票:0回答:0

我想在我的 Flask 项目上做一个非常简单的任务,更改我现有的 sqlite 列名称。但不幸的是,它总是给出错误结果。

这是我的模型.py

class User(db.Model, UserMixin):
id = db.Column(db.Integer(), primary_key=True, autoincrement=True)
username = db.Column(db.String(length=30), nullable=False, unique=True)
name = db.Column(db.String(length=40))
email = db.Column(db.String(length=50),
                  nullable=False, unique=True)
kuota = db.Column(db.Integer(), nullable=False, default=0)
license_keys = db.relationship(
    'License_Key', backref='owned_user', lazy=True)

我只想将“kuota”列更改为“point”

这就是我一直在努力做的事情

在数据库初始化时添加命名约定元数据并将 render_as_batch 设置为 true

metadata = MetaData(
naming_convention={
    'pk': 'pk_%(table_name)s',
    'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s',
    'ix': 'ix_%(table_name)s_%(column_0_name)s',
    'uq': 'uq_%(table_name)s_%(column_0_name)s',
    'ck': 'ck_%(table_name)s_%(constraint_name)s',
}
)
    db = SQLAlchemy(app, metadata=metadata)
    
    migrate = Migrate(app, db, render_as_batch=True)

我得到如下错误

sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: _alembic_tmp_user.poin
[SQL: INSERT INTO _alembic_tmp_user (id, username, name, email) SELECT user.id, user.username, user.name, user.email
FROM user]

只添加 render_as_batch 为真,没有命名约定

这是版本控制文件的样子:

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    with op.batch_alter_table('user', schema=None) as batch_op:
        batch_op.add_column(sa.Column('kuota', sa.Integer(), nullable=False))
        batch_op.drop_column('poin')

    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    with op.batch_alter_table('user', schema=None) as batch_op:
        batch_op.add_column(sa.Column('poin', sa.INTEGER(), nullable=False))
        batch_op.drop_column('kuota')

它仍然给我一个错误

NOT NULL constraint failed: _alembic_tmp_user.poin
[SQL: INSERT INTO _alembic_tmp_user (id, username, name, email) SELECT user.id, user.username, user.name, user.email
FROM user]

如何在 Flask 上完成这个简单的 sqlite 重命名列名称任务?

flask database-migration
© www.soinside.com 2019 - 2024. All rights reserved.