基于django2.2连oracle11g解决版本冲突的问题

yizhihongxing

下面是基于Django2.2连接Oracle11g并解决版本冲突问题的完整攻略:

环境准备

首先要保证环境准备充分,包括:

  • 安装Python3和pip(这里不再赘述)
  • 安装cx_Oracle库

cx_Oracle是Python访问Oracle数据库的一个库,可以使用pip进行安装,具体命令:pip install cx_Oracle

  • 安装Oracle Instant Client

Oracle Instant Client是Oracle官方提供的一个轻量级的客户端软件,包含用来连接Oracle数据库的基本库文件,可以在不安装完整版Oracle数据库软件的情况下,使用Python程序连接Oracle数据库。需要根据操作系统的要求下载对应的Oracle Instant Client包,官方网站为:https://www.oracle.com/database/technologies/instant-client/downloads.html

安装后还需要设置环境变量LD_LIBRARY_PATH和PATH,具体步骤可参考Oracle官方文档。

配置Django项目

在Django项目中需要配置DATABASES,这里的DATABASES需要指定ENGINE为'django.db.backends.oracle',还需要填写相应的参数,例如:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.oracle',
        'NAME': 'ORCL',
        'USER': 'scott',
        'PASSWORD': 'tiger',
        'HOST': 'localhost',
        'PORT': '1521',
    }
}

在这个例子中,'ORCL'是Oracle数据库的SID,'scott'和'tiger'分别是Oracle数据库的用户名和密码,'localhost'是Oracle数据库所在的主机名,'1521'是Oracle数据库使用的端口号。

解决版本冲突

在连接Oracle数据库时有可能会遇到版本冲突的问题,常见的解决方法是指定Oracle Instant Client中的底层库版本号,可以在DATABASES中添加如下参数:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.oracle',
        'NAME': 'ORCL',
        'USER': 'scott',
        'PASSWORD': 'tiger',
        'HOST': 'localhost',
        'PORT': '1521',
        'OPTIONS': {
            'libraries': ['/usr/lib/oracle/12.2/client64/lib/libclntsh.so.12.1']
        },
    }
}

这里指定了Oracle Instant Client中的底层库版本号为12.1,更改成实际使用的版本号即可。

示例说明

实际上在项目中可以通过不同的方法解决版本冲突的问题,下面给出两个示例说明:

示例1:使用LD_LIBRARY_PATH环境变量

在连接Oracle数据库时,可以预先设置LD_LIBRARY_PATH环境变量,指定Oracle Instant Client中底层库的路径,例如:

import os
os.environ['LD_LIBRARY_PATH'] = '/usr/lib/oracle/12.2/client64/lib'

这种方法也可以在Django项目中的settings.py中设置,例如:

import os
os.environ['LD_LIBRARY_PATH'] = '/usr/lib/oracle/12.2/client64/lib'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.oracle',
        'NAME': 'ORCL',
        'USER': 'scott',
        'PASSWORD': 'tiger',
        'HOST': 'localhost',
        'PORT': '1521',
    }
}

示例2:使用LD_PRELOAD环境变量

另一种解决版本冲突问题的方法是使用LD_PRELOAD环境变量,这个环境变量可以在程序运行时通过动态链接库机制优先加载指定的库文件。在Django项目中只需要在启动项目的命令前面添加LD_PRELOAD环境变量即可,例如:

LD_PRELOAD=/usr/lib/oracle/12.2/client64/lib/libclntsh.so.12.1 python manage.py runserver

这里的库文件路径和版本号需要根据实际情况更改。

以上就是基于Django2.2连接Oracle11g并解决版本冲突问题的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于django2.2连oracle11g解决版本冲突的问题 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django Form基于Model定义表单

    Django Form是一个用来处理表单的工具,它可以帮助我们方便地验证表单数据、生成表单HTML代码等。而使用基于Model的Form可以让我们更方便地定义表单结构,快速生成表单代码,并且能够自动处理表单和数据库中Model的交互。 下面是基于Model定义表单的完整攻略: 定义Model 首先,我们需要先定义一个Model类,例如: from djang…

    Django 2023年3月12日
    00
  • django常用模块汇总

      目录 django常用模块汇总 django常用模块汇总 from django.conf import settings # Django配置文件,自己django项目有配置就用自己的,没有就用系统默认配置。 from django import forms # form组件 class MyForm(forms.Form) from django.f…

    Django 2023年4月11日
    00
  • djando 项目用django自己服务器在局域网中被访问设置

    这是一个相当操蛋的东西,害老子搞了那么久,其实嘞,也用不着那么恨,都是自己做的孽!! —————–人工分割线—————————————————————   上边是项目目录结构。   1.进 settinf.py 文件进行设置 ALLOWED_HOSTS …

    2023年4月9日
    00
  • Django-权限信息自定义标签

    自定义权限标签: import re from django.template import Library from django.conf import settings register = Library() @register.inclusion_tag(“rbac/xxxxx.html”) def menu_html(request): “”” …

    Django 2023年4月16日
    00
  • Django 模板继承extend 标签include block

    # block 站网页位置# includ 导入网页标签# extends 导入网页模板# common_js.html <script src=”/static/plugins/jquery.min.js”> # footer.html <hr> <p>Thanks for visiting my site.</p…

    Django 2023年4月9日
    00
  • Python Django基础二之URL路由系统

    下面是Python Django基础二之URL路由系统的完整攻略。 1. 什么是URL路由系统 在Django中,URL路由系统就像是一个分配任务的调度员,当用户访问某个URL时,它会把这个请求分发给相应的视图函数进行处理。URL路由系统被设计得非常灵活,可以支持各种不同的URL格式。 2. URL路由系统的配置 Django中的URL路由系统的配置是在ur…

    Django 2023年5月16日
    00
  • python基础-requests模块、异常处理、Django部署、内置函数、网络编程

     网络编程   urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应。   校验返回值,进行接口测试: 编码:把一个Python对象编码转换成Json字符串   json.dumps() 解码:把Json格式字符串解码转换成Python对象   json.loads()     Post请…

    Django 2023年4月12日
    00
  • django学习-16.返回给前端页面数据为json数据类型的3种方案

    1.前言 2.JsonResponse类的源码简单分析 2.1.JsonResponse类的源码如下所示 2.2.JsonResponse类的构造函数里的每个入参的大概含义和作用 3.【方案1:使用方法serializers】的具体方案实现流程 3.1.第一步:先编写相关代码内容的视图函数 3.2.第二步:在任一浏览器访问该网址【http://127.0.0…

    Django 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部