解决django migrate报错ORA-02000: missing ALWAYS keyword


Posted in Python onJuly 02, 2020

错误信息

解决django migrate报错ORA-02000: missing ALWAYS keyword

PS D:\parttime\python\django\guanxiangzhiji> python manage.py migrate
Operations to perform:
 Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Traceback (most recent call last):
 File "D:\app\anaconda\lib\site-packages\django\db\backends\utils.py", line 82, in _execute
 return self.cursor.execute(sql)
 File "D:\app\anaconda\lib\site-packages\django\db\backends\oracle\base.py", line 510, in execute
 return self.cursor.execute(query, self._param_generator(params))
cx_Oracle.DatabaseError: ORA-02000: missing ALWAYS keyword

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
 File "D:\app\anaconda\lib\site-packages\django\db\migrations\recorder.py", line 67, in ensure_schema
 editor.create_model(self.Migration)
 File "D:\app\anaconda\lib\site-packages\django\db\backends\base\schema.py", line 307, in create_model
 self.execute(sql, params or None)
 File "D:\app\anaconda\lib\site-packages\django\db\backends\base\schema.py", line 137, in execute
 cursor.execute(sql, params)
 File "D:\app\anaconda\lib\site-packages\django\db\backends\utils.py", line 99, in execute
 return super().execute(sql, params)
 File "D:\app\anaconda\lib\site-packages\django\db\backends\utils.py", line 67, in execute
 return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
 File "D:\app\anaconda\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
 return executor(sql, params, many, context)
 File "D:\app\anaconda\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
 return self.cursor.execute(sql, params)
 File "D:\app\anaconda\lib\site-packages\django\db\utils.py", line 89, in __exit__
 raise dj_exc_value.with_traceback(traceback) from exc_value
 File "D:\app\anaconda\lib\site-packages\django\db\backends\utils.py", line 82, in _execute
 return self.cursor.execute(sql)
 File "D:\app\anaconda\lib\site-packages\django\db\backends\oracle\base.py", line 510, in execute
 return self.cursor.execute(query, self._param_generator(params))
django.db.utils.DatabaseError: ORA-02000: missing ALWAYS keyword

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
 File "manage.py", line 21, in <module>
 main()
 File "manage.py", line 17, in main
 execute_from_command_line(sys.argv)
 File "D:\app\anaconda\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
 utility.execute()
 File "D:\app\anaconda\lib\site-packages\django\core\management\__init__.py", line 375, in execute
 self.fetch_command(subcommand).run_from_argv(self.argv)
 File "D:\app\anaconda\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv
 self.execute(*args, **cmd_options)
 File "D:\app\anaconda\lib\site-packages\django\core\management\base.py", line 364, in execute
 output = self.handle(*args, **options)
 File "D:\app\anaconda\lib\site-packages\django\core\management\base.py", line 83, in wrapped
 res = handle_func(*args, **kwargs)
 File "D:\app\anaconda\lib\site-packages\django\core\management\commands\migrate.py", line 234, in handle
 fake_initial=fake_initial,
 File "D:\app\anaconda\lib\site-packages\django\db\migrations\executor.py", line 91, in migrate
 self.recorder.ensure_schema()
 File "D:\app\anaconda\lib\site-packages\django\db\migrations\recorder.py", line 69, in ensure_schema
 raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)
django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table (ORA-02000: missing ALWAYS keyword)

环境情况

1、操作系统:Win10 64bit

解决django migrate报错ORA-02000: missing ALWAYS keyword

2、Python版本:3.7.3

解决django migrate报错ORA-02000: missing ALWAYS keyword

3、django版本:2.2.4

解决django migrate报错ORA-02000: missing ALWAYS keyword

4、Oracle版本:11.2.0.4

解决django migrate报错ORA-02000: missing ALWAYS keyword

5、cx_oracle版本:7.0.0

解决django migrate报错ORA-02000: missing ALWAYS keyword

6、settings配置

解决django migrate报错ORA-02000: missing ALWAYS keyword

原因分析

从错误提示ORA-02000: missing ALWAYS keyword看,是SQL语法错误,创建表的时候使用了Always这个关键词。 Always是在Oracle12c的新特性自增序列里用到的,语法如下:

generated-column-spec
[ GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY 
[ ( START WITH IntegerConstant 
[ ,INCREMENT BY IntegerConstant] ) ] ] ]

但是,我机器上用的是Oracle11.2.0.4版本,这个语法在11g版本里执行自然就会报ORA-02000的错误。

解决方案

看了网上的一些解决方案,主要有2种:

(1)将Oracle升级到12c

(2)将cx_oracle降低版本

刚开始选用方案(2),觉得简单,但是实际操作下来,问题一环套一环,比如说将cx_oracle降低版本后,接着出现了django版本与cx_oracle版本不适应的情况,接着又降低django版本。。。接着做还是不行,最终放弃了。不知道有没有人成功过。

重新选择方案(1),装了Oracle12.1.0.2

解决django migrate报错ORA-02000: missing ALWAYS keyword

再将django和cx_oracle升级回最新版本,migrate的时候就成功了

解决django migrate报错ORA-02000: missing ALWAYS keyword

以上这篇解决django migrate报错ORA-02000: missing ALWAYS keyword就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用multiprocessing模块实现带回调函数的异步调用方法
Apr 18 Python
浅析Python多线程下的变量问题
Apr 28 Python
使用Python写个小监控
Jan 27 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
浅谈使用Python变量时要避免的3个错误
Oct 30 Python
Python堆排序原理与实现方法详解
May 11 Python
python实现傅里叶级数展开的实现
Jul 21 Python
Python用5行代码写一个自定义简单二维码
Oct 21 Python
Python实现剪刀石头布小游戏(与电脑对战)
Dec 31 Python
python 绘制国旗的示例
Sep 27 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
分享python函数常见关键字
Apr 26 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 #Python
使用Keras建立模型并训练等一系列操作方式
Jul 02 #Python
python解释器安装教程的方法步骤
Jul 02 #Python
Python分析最近大火的网剧《隐秘的角落》
Jul 02 #Python
keras训练浅层卷积网络并保存和加载模型实例
Jul 02 #Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 #Python
利用scikitlearn画ROC曲线实例
Jul 02 #Python
You might like
用PHP制作静态网站的模板框架(四)
2006/10/09 PHP
虚拟主机中对PHP的特殊设置
2006/10/09 PHP
php笔记之常用文件操作
2010/10/12 PHP
phpQuery占用内存过多的处理方法
2013/11/13 PHP
php数组函数array_key_exists()小结
2015/12/10 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
Aptana调试javascript图解教程
2009/11/30 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
python的三目运算符和not in运算符使用示例
2014/03/03 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
python编写简单端口扫描器
2019/09/04 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
Django视图、传参和forms验证操作
2020/07/15 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
什么是跨站脚本攻击
2014/12/11 面试题
校运会入场式解说词
2014/02/10 职场文书
校庆接待方案
2014/03/18 职场文书
个人承诺书
2014/03/26 职场文书
销售员岗位职责
2015/02/10 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
教你使用VS Code的MySQL扩展管理数据库的方法
2022/01/22 MySQL
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫