Обновление Oracle XE с 11g до 21c нарушило способность django общаться с TNS Listener

У меня есть старое приложение, которое работает под управлением django 1.10 с бэкэндом oracle XE 11g. Мы пытаемся обновить XE до 21c.

Проблема в том, что django не может найти слушателя TNS, хотя он есть и запущен. sqlplus работает правильно, так что проблема не в самом слушателе.

Приложение django и база данных XE работают на одном сервере, поэтому нет никаких сетевых проблем.

Основное изменение, насколько я могу судить, между 11g и 21c заключается в том, что в новой базе данных oracle есть подключаемые базы данных, и к ним нужно обращаться через механизм именования easy connect. Поддерживается ли это в django 1.10?

Прямое использование cx_Oracle для подключения к базе данных из python3 также работает без ошибок.

Любые указатели приветствуются.

Наконец-то нашел проблему:

У меня были prod.py и dev.py в настройках, и поскольку я вызывал только prod.py, я не заметил, что dev.py все еще имеет старую, не PDB адресацию в определении DATABASES. Обычно оба эти определения идентичны. Все изменения, которые я тестировал в prod, были молча отменены.

Нашел проблему, поместив операторы печати в

/home/raxak/.virtualenvs//lib/python3.6/site-packages/django/db/backends/oracle/base.py

непосредственно перед оператором Database.connect(...) в get_new_connection(...), чтобы увидеть, с чем он пытается соединиться.

Конечное определение DATABASES, которое сработало, было следующим:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.oracle',                                   
        'NAME' : '127.0.0.1:1521/XEPDB1',
        'PORT' : '',
        'HOST' : '',
        'USER' : <username>,
        'PASSWORD' : <password>,
        'CONN_MAX_AGE' : None,
        'OPTIONS' : {
            'threaded' : True,
        }
    }

Спасибо всем, кто помогал, особенно Кристоферу Джонсу,

Вернуться на верх