解决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程序
Apr 04 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
Python3中类、模块、错误与异常、文件的简易教程
Nov 20 Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
Python利用itchat库向好友或者公众号发消息的实例
Feb 21 Python
Python之lambda匿名函数及map和filter的用法
Mar 05 Python
django多对多表的创建,级联删除及手动创建第三张表
Jul 25 Python
python实现批量文件重命名
Oct 31 Python
python构建指数平滑预测模型示例
Nov 21 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 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生成不重复随机数的方法汇总
2014/11/19 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
python 去除二维数组/二维列表中的重复行方法
2019/01/23 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
惠普香港官方商店:HP香港
2019/04/30 全球购物
化学相关工作求职信
2013/10/02 职场文书
幼儿园数学教学反思
2014/02/02 职场文书
大学生就业求职信
2014/06/12 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
四查四看自我剖析材料
2014/09/19 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL