django.db.utils.DatabaseError:DPY-4027:没有配置目录可在我的 dockerized django 应用程序中搜索 tnsnames.ora

问题描述 投票:0回答:1

我试图将我的 Django 应用程序与 Oracle 数据库连接,但没有成功。
我添加了 TNS_ADMIN 环境变量,但问题仍然存在。
这是我的 tnsnames.ora 文件的内容:

# tnsnames.ora Network Configuration File: C:\app\HP\product\21c\homes\OraDB21Home1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = xxx)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

LISTENER_XE =
  (ADDRESS = (PROTOCOL = TCP)(HOST = xxx)(PORT = 1521))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

需要注意的是,我使用的是SQL Developer。
我在 django 中的数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.oracle',
        'NAME': os.environ.get("DB_NAME"),
        'USER': os.environ.get("DB_USER"),
        'HOST': os.environ.get("DB_HOST"),
        'POSRT': os.environ.get("DB_PORT"),
        'PASSWORD': os.environ.get("DB_PASS")
    }
}

docker-compose.yml 文件:

version: '3'
services:
  backend:
    container_name: bdr-backend
    build:
      context: .
    command: >
      sh -c "python manage.py makemigrations --noinput &&
      python manage.py migrate --noinput && 
      python manage.py runserver 0.0.0.0:8000"
    ports:
      - 8000:8000
    volumes:
      - ./backend:/backend
    env_file:
      - .env
    environment:
      - DEBUG=1
      - DB_HOST=${DB_HOST}
      - DB_NAME=${DB_NAME}
      - DB_USER=${DB_USER}
      - DB_PASS=${DB_PASS}
    depends_on:
      - redis
  redis:
    image: redis:7.0.5-alpine
    container_name: redis2
    expose:
      - 6379

我在 Windows 10 上使用 docker docker 桌面。
如何解决这个问题?

python django oracle docker
1个回答
0
投票

使用 Easy Connect 连接字符串语法。 将

settings.py
“NAME”值设置为此。

示例

settings.py
配置文件如下:

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.oracle',
    'NAME': 'xxxx:1521/xe',
    'USER': 'scott',
    'PASSWORD': 'topSecret'
  }
}

xxxx
将是您编辑后的主机名,或者可能是“localhost”。使用此语法,您不需要 tnsnames.ora 文件,也不需要设置 TNS_ADMIN 环境变量。

Django 优先使用 python-oracledb。如果未找到 python-oracledb,则将使用 cx_Oracle。这些新老驱动程序的设置是相同的。

请参阅 Django 5.0 原生支持 python-oracledb将 python-oracledb 1.0 与 SQLAlchemy、Pandas、Django 和 Flask 一起使用

此外,计划从 21x XE 更新到 23ai Free,您可以从 Oracle 数据库软件下载 页面获取。

© www.soinside.com 2019 - 2024. All rights reserved.