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= ...
随机推荐
- CPU核数
今天想看CPU核数,又忘记怎么看了QAQ. CPU的基本信息都被记录在/proc/cpuinfo中,一般直接cat /proc/cpuinfo就可以了. 主要是学习一下物理cpu核数/逻辑cpu核数的 ...
- 爆力破解Windows操作系统登录密码核心技术
一.不借助U盘等工具二.已将win7登录账户为test,密码为666666,全套C/C++黑客资料请加:726920220QQ 1.将电脑开机关机几次,进入以下界面
- reCAPTCHA无法加载?一个小工具就可以轻松解决!
Chrome用户可以在应用商店搜索gooreplacer安装,或者点我下载,然后打开chrome://extensions/,将下载的crx文件拖入浏览器窗口,即可完成安装 Firefox用户可以在 ...
- JAVA集合二:HashMap和Hashtable
参考链接: HOW2J.CN HashMap HashMap实现了JAVA的Map接口,类似于C++的STL框架的Map,是存储键值对的数据结构.键(key)是唯一的,但值(value)可以重复,如果 ...
- 异常类throwable
一.Error 严重错误,系统内部的错误.无法通过处理,只能避免. 二.Exception 使用不当导致,是可以避免的. 异常分类: 1.编译时异常 编译时遇到的异常,若未处理,就会编译失败,必须进行 ...
- 基于Python爬虫采集天气网实时信息
相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10- ...
- Android集成百度地图
1. 百度地图api Android定位SDK Android地图SDK Android地图SDK<------
- 如何系统地学习Excel?
人在江湖,生不由己.人在职场,Excel必备. 为了帮助更多人快速掌握职场必备技能Excel,我写了一个免费的教程<职场Excel>,能帮助你解决99%职场中遇到的问题. 对,你没看错,是 ...
- 如何使用Istio 1.6管理多集群中的微服务?
假如你正在一家典型的企业里工作,需要与多个团队一起工作,并为客户提供一个独立的软件,组成一个应用程序.你的团队遵循微服务架构,并拥有由多个Kubernetes集群组成的广泛基础设施. 由于微服务分布在 ...
- Python编程语言简介
Python诞生于20世纪90年代初,由荷兰人吉多·范罗苏姆发明.那么,Python这一门编程语言是如何发明的呢?这之中又有怎么的故事呢?请看下面. 故事发生在1989年的圣诞节上,吉多先生为了打发无 ...