解决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计算书页码的统计数字问题实例
Sep 26 Python
在Django的视图中使用form对象的方法
Jul 18 Python
python中map()与zip()操作方法
Feb 27 Python
Python迭代器定义与简单用法分析
Apr 30 Python
python实现比较文件内容异同
Jun 22 Python
django session完成状态保持的方法
Nov 27 Python
python基于C/S模式实现聊天室功能
Jan 09 Python
python实现超市商品销售管理系统
Nov 22 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
详解Python牛顿插值法
May 11 Python
在python中实现导入一个需要传参的模块
May 12 Python
如何用python清洗文件中的数据
Jun 18 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
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
PHP 中文处理技巧
2010/04/25 PHP
linux iconv方法的使用
2011/10/01 PHP
PHPThumb图片处理实例
2014/05/03 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
Python简单计算文件夹大小的方法
2015/07/14 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
详解python中的线程与线程池
2019/05/10 Python
python和c语言的主要区别总结
2019/07/07 Python
解决python 找不到module的问题
2020/02/12 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
python exit出错原因整理
2020/08/31 Python
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
nohup的用法
2012/11/26 面试题
平安校园建设方案
2014/05/02 职场文书
入职担保书范文
2014/05/21 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL