2016-03-22 1 views
1

В имени пользователя базы данных Django используется как имя схемы.django-db2 использовать другое имя схемы, чем имя пользователя базы данных

В DB2 нет пользователей уровня базы данных. Пользователи ОС будут использоваться для входа в базу данных.

В моей базе данных У меня есть два разных имени для базы данных пользователя и схемы базы данных.
Итак, в django с db2 как backend, как я могу использовать другое имя схемы для доступа к таблицам?

EDIT: Уточнение, что я пытаюсь получить доступ через ORM, а не сырые SQL. ORM неявно использует имя пользователя в качестве имени схемы. Как этого избежать?

ответ

0

DB2 использует так называемые названия двух частей, schemaname.objectname. На каждый объект, включая таблицы, можно ссылаться на все имя. Внутри сеанса есть текущая схема, которая по умолчанию установлена ​​на имя пользователя. Его можно изменить с помощью инструкции SET SCHEMA myschema.

Для вашего вопроса есть два варианта: 1) Референция таблицы с их полным именем: schemaname.tablename 2) Используйте set schema, чтобы установить общий SchemaName и ссылки только таблицу.

+0

Где я могу добавить «SET SCHEMA myschema»? При доступе к моделям, как мы можем использовать разные имена схем, поскольку по умолчанию он будет использоваться как имя пользователя.model_name? – s28

+0

Также я хочу получить доступ к таблицам django по умолчанию (например, таблицам, используемым для auth), к которым можно получить доступ из другого имени схемы, чем пользователь базы данных. – s28

+0

Спасибо Henrik, Как мы можем попросить ORM использовать другую схему? – sbose

0

Есть решение для этого:

1) Мы можем использовать следующий запрос, чтобы изменить схему в db2:

set schema schema_name; 

2) Мы можем выполнить запрос выше при запуске Джанго. Мы должны добавить следующий код в любой файл urls.py, manage.py, который запустит его при запуске.

def set_schema(sender, **kwargs): 
    from django.db import connection 
    cursor = connection.cursor() 
    try: 
     cursor.execute("set schema schema_name") 
    except Exception as e: 
     print str(e) 

from django.db.backends.signals import connection_created 
connection_created.connect(set_schema) 
Смежные вопросы