Модели Django не работают с базой данных Oracle - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть несколько приложений с разными подключениями к базе данных. Все они работают нормально. Моему новому приложению требуется соединение с Oracle, настроенное в settings.py:

'database_oracle' : {
        'ENGINE'   : 'oracle',
        'NAME'     : 'name',
        'USER'     : 'user',
        'PASSWORD' : 'pw',
        'HOST'     : 'connection',
        'PORT'     :  1234,
        'SCHMEA'   :  'abc',
    },

Модели в моем models.py имеют дополнительные мета-классы:

 class Meta:
    db_table = '"abc.table1"'
    data_source = 'database_oracle'
    data_source_app = 'myapp'

Проблема в том, что

Model1.objects.all() 

возвращает ошибку: `

django.db.utils.DatabaseError: ORA-00942: таблица или представление не существует

Но если я использую соединение django.db:

from django.db import connections
db_conn = connections['database_oracle']
c = db_conn.cursor()
c.execute("SELECT MAX(date) FROM abc.table1 WHERE key = 1234567").fetchall()

Работает отлично. Поэтому я попробовал разные варианты написания для db_table:

  1. db_table = 'table1'

  2. db_table = '"table1"'

  3. db_table = 'abc.table1'

  4. db_table = '"abc.table1"'

Изменения были перенесены каждый раз, и вот как выглядит мой routers.py (операторы if принадлежат другим приложениям и другим базам данных):

myapps = ['myapp']
class DataRouter:
  def db_for_read(self, model, **hints):
    if [...]
    elif model._meta.app_label in myapps:
        return 'database_oracle'
    return None
  def db_for_write(self,model, **hints):
    if [...]
    elif model._meta.app_label in myapps:
        return 'database_oracle'
    return None
  def allow_relation(self, obj1, obj2, **hints):
    if [...]
    elif obj1._meta.app_label in myapps or obj2._meta.app_label in myapps:
        return True
    return None
  def allow_migrate(self, db, app_label, model_name=None, **hints):
    if [...]
    elif app_label in myapps:
        return db =='database_oracle'
    return None

Кто-нибудь знает, почему модели не могут подключиться к моей базе данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...