◆ 下载cx-Oracle模块:
pip install cx-Oracle
下载地址:https://pypi.org/project/cx-Oracle/
◆ 测试脚本:
# -*- coding: utf-8 -*-
import cx_Oracle as cx #导入模块
con = cx.connect('root', 'root123', '127.0.0.1:1521/ORCL') #创建连接
cursor = con.cursor() #创建游标
cursor.execute("select * from dual") #执行sql语句
data = cursor.fetchone() #获取一条数据
print(data) #打印数据
cursor.close() #关闭游标
con.close() #关闭数据库连接
◆ 报错处理:
1、Unable to acquire Oracle environment handle
解决方案:
python访问oracle数据需要以下必要条件
- cx_oracle包
- oracle客户端(或简端)例如:instantclient_12_1
此处为instantclient版本和cx_oracle包不匹配导致的,cx_oracle5.2可以用instantclient_12_2版本
1、下载对应的instant_client包
2、将里面所有的dll文件拷贝到python的site-packages目录(或者在path中添加instant_client包的路径)
instant_client下载地址:https://www.oracle.com/database/technologies/instant-client/downloads.html
◆ 修改项目中的settings.py文件:
1、配置DATABASES
方式一:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'IP:端口号/service_name',
'USER': '用户名',
'PASSWORD': '密码',
}
}
方式二:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': '数据库SID',
'USER': '用户名',
'PASSWORD': '密码',
'HOST':'IP',
'PORT':'端口号'
}
}
2、配置INSTALLED_APPS
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hello',
]
◆ 数据库表生成:
1、正向生成:
创建models
from django.db import models
class AlarmGroup(models.Model):
group_name = models.CharField(primary_key=True, max_length=250)
group_des = models.TextField(blank=True, null=True)
members = models.TextField(blank=True, null=True)
timestamp = models.DateTimeField()
执行命令正向生成
python manage.py makemigrations
python manage.py migrate
2、反向生成:
数据库中创建表
CREATE TABLE `alarm_group` (
`group_name` varchar(250) NOT NULL,
`group_des` blob,
`members` blob,
`timestamp` datetime NOT NULL,
`on_duty` blob,
`leader` blob,
PRIMARY KEY (`group_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
执行命令,生成model.py代码
python manage.py inspectdb
生成的代码model.py如下
class AlarmGroup(models.Model):
group_name = models.CharField(primary_key=True, max_length=250)
group_des = models.TextField(blank=True, null=True)
members = models.TextField(blank=True, null=True)
timestamp = models.DateTimeField()
class Meta:
managed = False
db_table = 'alarm_group'
!反向生成报错:
1、ORA-00904 IDENTITY_COLUMN
解决方案:
把django版本降低到1.11.22后运行inspectdb,,然后再升级回来
(1)卸载django
PS D:\> pip uninstall django
Uninstalling Django-2.2.4:
Would remove:
d:\app\anaconda\lib\site-packages\django-2.2.4.dist-info\*
d:\app\anaconda\lib\site-packages\django\*
d:\app\anaconda\scripts\django-admin.exe
d:\app\anaconda\scripts\django-admin.py
Proceed (y/n)? y
Successfully uninstalled Django-2.2.4
(2)安装django1.11
PS D:\parttime\python\django\guanxiangzhiji> pip install django==1.11
Collecting django==1.11
Using cached https://files.pythonhosted.org/packages/47/a6/078ebcbd49b19e22fd560a2348cfc5cec9e5dcfe3c4fad8e64c9865135bb/Django-1.11-py2.py3-none-any.whl
Requirement already satisfied: pytz in d:\app\anaconda\lib\site-packages (from django==1.11) (2018.9)
Installing collected packages: django
Successfully installed django-1.11
(3)运行inspectdb命令
PS D:\django\guanxiangzhiji> python manage.py inspectdb >models.py
2、‘cx_Oracle.Cursor’ object has no attribute ‘numbersAsStrings’
cx_oracle6.1版本之后没有numbersAsStrings属性了,需要将cx_oracle版本降至5.2
注:改变cx_oracle版本的时候需注意instant_client的版本
本文介绍了如何在Django项目中使用Oracle数据库,包括下载cx-Oracle模块、解决环境配置问题、设置DATABASES和INSTALLED_APPS,以及数据库表的正向和反向生成。在配置过程中,可能会遇到版本不匹配、缺少必要组件等问题,文中提供了相应的解决方案。

650

被折叠的 条评论
为什么被折叠?



