flask-migrate 处理sqlite数据库报错Constraint must have a name 的解决方案
环境:flask+python+sqlite,我想给某个表里某个字段加unique属性
执行 python manage.py db migrate 没报错,执行 python manage.py db upgrade 的时候报错如下
Traceback (most recent call last):
File "manage.py", line , in <module>
manager.run()
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/flask_script/__init__.py", line , in run
result = self.handle(argv[], argv[:])
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/flask_script/__init__.py", line , in handle
res = handle(*args, **config)
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/flask_script/commands.py", line , in __call__
return self.run(*args, **kwargs)
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/flask_migrate/__init__.py", line , in wrapped
f(*args, **kwargs)
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/flask_migrate/__init__.py", line , in upgrade
command.upgrade(config, revision, sql=sql, tag=tag)
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/alembic/command.py", line , in upgrade
script.run_env()
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/alembic/script/base.py", line , in run_env
util.load_python_file(self.dir, "env.py")
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/alembic/util/pyfiles.py", line , in load_python_file
module = load_module_py(module_id, path)
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/alembic/util/compat.py", line , in load_module_py
spec.loader.exec_module(module)
File "<frozen importlib._bootstrap_external>", line , in exec_module
File "<frozen importlib._bootstrap>", line , in _call_with_frames_removed
File "migrations/env.py", line , in <module>
run_migrations_online()
File "migrations/env.py", line , in run_migrations_online
context.run_migrations()
File "<string>", line , in run_migrations
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/alembic/runtime/environment.py", line , in run_migrations
self.get_context().run_migrations(**kw)
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/alembic/runtime/migration.py", line , in run_migrations
step.migration_fn(**kw)
File "/app/fusionwork_deployment/api/migrations/versions/ce7abee10440_.py", line , in upgrade
batch_op.create_unique_constraint(None, ['ip'])
File "/app/fusionwork_deployment/venv/lib/python3.6/contextlib.py", line , in __exit__
next(self.gen)
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/alembic/operations/base.py", line , in batch_alter_table
impl.flush()
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/alembic/operations/batch.py", line , in flush
fn(*arg, **kw)
File "/app/fusionwork_deployment/venv/lib/python3.6/site-packages/alembic/operations/batch.py", line , in add_constraint
raise ValueError("Constraint must have a name")
ValueError: Constraint must have a name
解决方案:
在app/__init__.py文件
增加代码
from sqlalchemy import MetaData # 定义命名惯例
naming_convention = {
"ix": 'ix_%(column_0_label)s',
"uq": "uq_%(table_name)s_%(column_0_name)s",
"ck": "ck_%(table_name)s_%(column_0_name)s",
"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
"pk": "pk_%(table_name)s"
}
# db = SQLAlchemy()
db = SQLAlchemy(metadata=MetaData(naming_convention=naming_convention))
检查 migrations/env.py是否有 render_as_batch=True 配置
context.configure(
connection=connection,
target_metadata=target_metadata,
process_revision_directives=process_revision_directives,
compare_type=True, # 检查字段类型
compare_server_default=True, # 比较默认值
render_as_batch=True, # this is new feature,for sqlite alter table
**current_app.extensions['migrate'].configure_args
)
然后把之前迁移产生的版本文件删掉,重新迁移一次,成功。
flask-migrate 处理sqlite数据库报错Constraint must have a name 的解决方案的更多相关文章
- Django_重装系统后无法使用 sqlite 数据库报错:com.intellij.execution.ExecutionException: Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC
重装系统后无法使用 sqlite 数据库报错 报错 : com.intellij.execution.ExecutionException: Exception in thread "ma ...
- [o] SQLite数据库报错: Invalid column C
向SQLite数据库内新增列,之前出现过报错为提示no such column,通过删除并重建数据库文件解决,这次报错为无效的数据列: java.lang.IllegalArgumentExcepti ...
- [O] SQLite数据库报错:no such column
在SQLite数据库创建语句增加列,运行后报错:no such column 在语法规范的前提下,即 //SQLite数据库创建,逗号与空格须严格 String CREATE_NOTE = " ...
- Django迁移数据库报错
Django迁移数据库报错 table "xxx" already exists错误 django在migrate时报错django migrate error: table 'x ...
- dbstart和dbshut启动、关闭数据库报错ORACLE_HOME_LISTNER is not SET解决办法
dbstart启动数据库报错,如下: [oracle@wen ~]$ dbstartORACLE_HOME_LISTNER is not SET, unable to auto-start Oracl ...
- sql server 2008 创建新数据库报错、创建表报错、更改表的设计报错
一:创建数据库报错如下: 二:解决,将软件以管理员身份运行 三:创建表报错如下图: 四:解决办法,在你创建的数据库下面的安全里,找到你创建的用户,属性,添加权限,红色标注,然后确定: 五:更改表的设计 ...
- 连接mysql数据库报错java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized...解决方法
今天连接mysql数据库报错如下: java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or r ...
- 远程登录oracle 12.2数据库报错ORA-28040解决办法
今天新安装的oracle 12.2.0.1数据库,通过本地sqlplus远程登录12c数据库报错ora-28040,如下: ORA-28040: No matching authentication ...
- Mysql数据库报错1264
数据库报错 [Err] 1264 - Out of range value adjusted for column 'ID' at row 1 修改MYSQL下的my.ini, 将 sql-mode= ...
随机推荐
- 《Python测试开发技术栈—巴哥职场进化记》—前言
写在前面 今年从4月份开始写一本讲Python测试开发技术栈的书,主要有两个目的,第一是将自己掌握的一些内容分享给大家,第二是希望自己能系统的梳理和学习Python相关的技术栈.当时我本来打算以故事体 ...
- css盒子流动和block。inline
回忆一下盒子流动等概念! 1.盒子模型的宽度与高度,都是包括padding的值.(代码的理解如下:) 这样的结果的到就是 宽度和高度都是220了 2.流动型,在标签中存在块级元素和行内元素, 块级元 ...
- 硬核干货:5W字17张高清图理解同步器框架AbstractQueuedSynchronizer
前提 并发编程大师Doug Lea在编写JUC(java.util.concurrent)包的时候引入了java.util.concurrent.locks.AbstractQueuedSynchro ...
- vue学习(四) v-on:事件绑定
//html <div id="app"> <input type="button" value="ok" v-bind: ...
- ken桑带你读源码之scrapy downloadermiddlewares
downloadermiddlewares 文件夹是下载中间件 其中 process_request 还没请求时的处理函数 process_response 请求之后的处理函数 chunke ...
- Redis系列(九):Redis的事务机制
提到事务,相信大家都不陌生,事务的ACID四大特性,也是面试时经常问的,不过一般情况下,我们可能想到的是传统关系型数据库的事务,其实,Redis也是提供了事务机制的,本篇博客就来讲解下Redis的事务 ...
- 类加载Class Loading
JVM 何时.如何把 Class 文件加载到内存,形成可以直接使用的 Java 类型,并开始执行代码? 类的生命周期 加载 - 连接(验证.准备.解析)- 初始化 - 使用 - 卸载. 注意,加载 ...
- js如何从一个数组中随机取出n个不同且不重复的值
前言 一位正在学习前端的菜鸟,虽菜,但还未放弃. 给大家画张图了解思路 以下是代码 function randomArr(arr,num){ let newArr = [];//创建一个新数组 for ...
- 【SDOI2012】Longge 的问题 题解(欧拉函数)
前言:还算比较简单的数学题,我这种数学蒟蒻也会做QAQ. --------------- 题意:求$\sum\limits_{i=1}^n gcd(i,n)$的值. 设$gcd(i,n)=d$,即$d ...
- CSS样式大全(网络收集整理)
CSS样式大全(网络收集整理 字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 { ...