解决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实现的扫雷游戏实例代码
Aug 01 Python
Python中使用select模块实现非阻塞的IO
Feb 03 Python
Python中使用支持向量机SVM实践
Dec 27 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
Jan 17 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
Python Matplotlib 基于networkx画关系网络图
Jul 10 Python
Flask配置Cors跨域的实现
Jul 12 Python
Python中print函数简单使用总结
Aug 05 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
python如何随机生成高强度密码
Aug 19 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检查字符串中是否有外链的方法
2015/07/29 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
laravel5.6实现数值转换
2019/10/23 PHP
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
使用python模拟高斯分布例子
2019/12/09 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
.net开发工程师面试题
2014/02/25 面试题
股份合作协议书
2014/09/10 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技