python使用 Oracle 数据库&Django配置Oracle数据库

一、python连接数据库

from django.test import TestCase

# Create your tests here.
import cx_Oracle


def main():
    # 1.建立连接
    conn = cx_Oracle.connect('******', '******', '******:******/xydb')
    # 2.创建游标
    cursor = conn.cursor()

    # 3.执行SQL
    res = cursor.execute('select cust_id,cust_name from lh_test')
    # 4.获取数据
    data = res.fetchall()
    for cust_id, cust_name in data:
        print(cust_name,cust_id)

    # 5.关闭游标
    cursor.close()

    # 6.关闭连接
    conn.close()


if __name__ == '__main__':
    main()

关于Python3连接Oracle时报错"64-bit Oracle Client library cannot be loaded"解决方案

在这里插入图片描述

在已安装好cx_Oracle,通过客户端测试可连接的情况下报错如下:
cx_Oracle版本可在以下官网查询,对应到python,oracle的版本。
https://cx-oracle.readthedocs.io/en/latest/
问:
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found".

官网下载:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
在这里插入图片描述
解压后文件如下图
在这里插入图片描述
将解压后的文件中的dll文件复制到python文件中
在这里插入图片描述
Linux RPM -ivh 安装即可
在这里插入图片描述

测试通过输出结果

在这里插入图片描述

二、Django配置Oracle数据库

客户端连接测试,可按提示安装部分驱动
在这里插入图片描述

service_name
  DATABASES = {
    'default': {
      'ENGINE': 'django.db.backends.oracle',
      'NAME': 'IP:端口号/service_name',
      'USER': '用户名',
      'PASSWORD': '密码',
    }
  }
 
SID
  DATABASES = {
    'default': {
      'ENGINE': 'django.db.backends.oracle',
      'NAME': '数据库SID',
      'USER': '用户名',
      'PASSWORD': '密码',
      'HOST':'IP',
      'PORT':'端口号'
    }
  }

Terminal 中下载pip install cx-Oracle
在这里插入图片描述

三、models.py

3.1

附: 针对每个应用的数据库分别执行

python manage.py migrate --database=app_db_name


django在migrate时报错cx_Oracle.DatabaseError: 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版本,,依然bug,因本人将数据写入MySQL中,Oracle读取仅解决3.2问题,3.1问题可留给大家尝试。

查询Python版本 python
在这里插入图片描述
查询django版本 pip show django
在这里插入图片描述
查看cx_oracle版本pip show cx_oracle
在这里插入图片描述

3.2


inspectdb命令报错 ORA-00904: "IDENTITY_COLUMN": invalid identifier

原因分析见上

pip uninstall django
pip install Django==1.11.22
python manage.py inspectdb --database db_oracle lh_test >app/models.py
pip uninstall django
pip install Django==3.1.2

在这里插入图片描述

问:

python Could not build wheels for cx-Oracle which use PEP 517 and cannot be installed directly
答:
pip3 install --upgrade pip

easy_install pip

答: 环境安装
在这里插入图片描述
问:

cannot import name 'path' from django.urls django
答: 版本问题,需要将django版本升级到2.0

四、Oracle 19c 下载安装

使用迅雷下载
在这里插入图片描述
解压到文件选择安装
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

五, Oracle 忘记密码

 1) 打开cmd

 2)输入 set oracle_sid=数据库名称,回车

  3)在输入 sqlplus "/as sysdba",回车,进入oracle后台管理

  4)出现“SQL>”,继续输入 select username,password from dba_users where username ='SYSTEM';回车

   5)修改system账户密码,输入 alter user system identified by 密码;回车,显示“用户已更改”

在这里插入图片描述

六,Oracle 低版本客户端连接 19c 报ORA-28040 和 ORA-01017 错误的解决方法

修改 network/admin/sqlnet.ora

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.AUTHENTICATION_SERVICES=(NTS)

然后报错01017

重新修改一下用户密码就行了

sqlplus “/as sysdba”
alter user system identified by 密码

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值