flask: migrate报pymysql.err.OperationalError: (1138, 'Invalid use of NULL value')
一,报错信息:
pymysql.err.OperationalError: (1138, 'Invalid use of NULL value')
原因:
数据库中已经有了值为null的数据时,
此时再把此字段修改成nullable=False
就会报这个错误
二,解决方法之一:
删除字段重新添加
三,解决方法之二:
$ flask db migrate -m '改subject_id字段为非空'
...
Generating /data/yourproject/migrations/versions/95d973bcd2eb_改subject_id字段为非空.py ... done
编辑上面生成的迁移脚本:
在upgrade中,alter_column之前增加一行:
batch_op.execute("UPDATE articles SET subject_id = 0 WHERE subject_id IS NULL;")
就是执行一条sql把字段中的空值处理成0,这样后面改为非空时就不会因为有空值而报错了
如下:
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('articles', schema=None) as batch_op:
batch_op.execute("UPDATE articles SET subject_id = 0 WHERE subject_id IS NULL;")
batch_op.alter_column('subject_id',
existing_type=mysql.INTEGER(),
nullable=False,
comment='话题id')
# ### end Alembic commands ###
当然,也可以先手动执行此sql
浙公网安备 33010602011771号