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= ...
随机推荐
- 9.CSMA_CD协议
先听再说,边听边说 载波监听多点接入/碰撞检测CSMA/CD( carrier sense multiple access with collision detection) CD:碰撞检测(冲突检测 ...
- p73_万维网和HTTP协议
一.URL形式 URL不区分大小写 <协议>://<主机>:<端口>/<路径> 二.HTTP协议 HTTP协议定义了浏览器(万维网客户进程)怎样向万维网 ...
- vue-cli 2.x和3.x配置移动端适配px自动转为rem
移动端适配一直都是个大问题,现在也出现了各种各样的解决方案,比如 rem, vw 百分比等,但是比较成熟的切比较容易编写的还是 rem,他是相对于根元素的 font-size 进行等比例计算的. 但是 ...
- 题解 洛谷 P2254 【[NOI2005]瑰丽华尔兹】
发现在同一时间段中,滑动的方向具有唯一性,所以不难得出\(DP\)方程. \(f_{i,j}=max(f_{i,j},f_{i-dx_,j-dy}+dis_{i,j,i-dx_,j-dy})\) \( ...
- 题解 洛谷 P4171 【[JSOI2010]满汉全席】
考虑\(2-SAT\). 将汉式看作\(0\)状态,满式看做\(1\)状态,将每个材料拆成\(01\)两个状态. 从\(a\)向\(b\)连有向边表示的意义为选了\(a\)后必须选\(b\). 那么每 ...
- ElasticSearch(二)Kibana、版本控制
Kibana简介: Kibana可视化界面 Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作. 你用Kibana来搜索,查看,并和存储在Elasticsearch ...
- 前端需要知道的 HTML5 SEO优化
title标签,字数不能过长(不超过70个字符最优) <title>淘宝网 - 淘!我喜欢</title> 使用description以及keyword标签(不超过300个字符 ...
- Java容器学习之ArrayList
一.概述 ArrayList是java中十分常用的集合类,继承于AbstractList,并实现了List.RandomAccess.Cloneable和Serializable接口.ArrayLis ...
- Day15_redis安装及配置
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 redi ...
- MacOS SVN简单入门
背景:MacOS内置了SVN的客户端和服务器端的软件,下边所使用到的目录需要结合自己电脑的具体情况进行设置,并不是很困难. MacOS SVN简单入门 第一部分,创建本地的SVN测试仓库,并修改相应的 ...