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

下面是基于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 中使用request请求失败,requests.exceptions.ConnectionError: HTTPConnectionPool(host=’xxx’, port=80):

    记录下今天遇到的问题: 本地在使用request请求接口的时候,没有问题 但是代码部署在服务器上之后,请求失败,错误:requests.exceptions.ConnectionError: HTTPConnectionPool(host=’xxxxx’, port=80): Max retries exceeded with url: /backend-a…

    Django 2023年4月10日
    00
  • Django 新建项目运行 python manage.py runserver 8080 报错

    PS D:\Programs\Python\WebSite1\MySite> python manage.py runserver 8080 Watching for file changes with StatReloader Exception in thread django-main-thread: Traceback (most recent…

    Django 2023年4月16日
    00
  • 简单聊一下Uwsgi和Django的爱恨情仇

    项目目录:/root/app Uwsgi的配置文件 [uwsgi] # Python扩展包安装的地方 pythonpath=/usr/local/src/python3/lib/python3.5/site-packages # Django根目录 chdir=/root/app # wsgi.py跟根目录的相对路径 wsgi-file=app/wsgi.p…

    Django 2023年4月10日
    00
  • Django 添加自定义包路径

    在设置文件里: import sys sys.path.insert(0,os.path.join(BASE_DIR,”要导包的目录名”)) 用pycharm时,如果导包后没有自动提示,可以把导包的目录名标记为Sources Root

    Django 2023年4月9日
    00
  • django实现用户登陆功能详解

    下面详细讲解“Django实现用户登录功能”的完整攻略: 1. 创建Django项目 首先,我们需要先创建一个Django项目。在命令行中执行如下命令: django-admin startproject myproject 这将会创建一个名为 “myproject” 的Django项目。 2. 创建应用 接下来,我们需要创建一个应用,用来实现用户登录功能。…

    Django 2023年5月16日
    00
  • 在Python的Django框架上部署ORM库的教程

    当我们选择使用Django框架进行web应用开发时,我们通常会使用ORM库来进行数据库交互,以便于我们使用Python语言轻松地进行数据库查询、插入、更新和删除等操作。 在本教程中,我们将详细讲解如何在Python的Django框架上部署ORM库的步骤,以及两个示例说明。 安装所需软件 首先,我们需要安装Python和Django框架。可以通过以下命令进行安…

    Django 2023年5月16日
    00
  • Django之Model操作

    一、字段 AutoField(Field) – int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) – bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名为id的列 from django.db import models cla…

    Django 2023年4月13日
    00
  • Python Django CBV下的通用视图函数

    ListView TemplateView DetailView   之前的代码实例基本上都是基于FBV的模式来撰写的,好处么,当然就是简单粗暴。。正如: def index(request): return HttpResponse(‘hello world’) 上面的写法,基本接触不到视图函数里面的通用视图。只是在介绍CBV的时候稍微介绍了下引用,大概用…

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