解决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 相关文章推荐
2款Python内存检测工具介绍和使用方法
Jun 01 Python
举例讲解Python程序与系统shell交互的方式
Apr 09 Python
Python 中的 else详解
Apr 23 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
May 24 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
Python分支语句与循环语句应用实例分析
May 07 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
Python绘制热力图示例
Sep 27 Python
pycharm快捷键汇总
Feb 14 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
python logging 日志的级别调整方式
Feb 21 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实现图象锐化代码
2007/06/14 PHP
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
多广告投放代码 推荐
2006/11/13 Javascript
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
详解vue 组件注册
2020/11/20 Vue.js
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
Python进程间通信用法实例
2015/06/04 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
Python标准库sched模块使用指南
2017/07/06 Python
python绘制简单折线图代码示例
2017/12/19 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
基于python实现名片管理系统
2018/11/30 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
采用专利算法搜索最廉价的机票:CheapAir
2016/09/10 全球购物
程序员岗位职责
2013/11/11 职场文书
学校募捐倡议书
2014/05/14 职场文书
贷款担保申请书
2014/05/20 职场文书
主题班会演讲稿
2014/05/22 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript