我试图将我的 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 桌面。
如何解决这个问题?
使用 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 数据库软件下载 页面获取。