/ / django-db2 usa un nombre de esquema diferente al del nombre de usuario de la base de datos - django, python-2.7, django-models, db2

django-db2 usa un nombre de esquema diferente al nombre de usuario de la base de datos - django, python-2.7, django-models, db2

En la base de datos Django, el nombre de usuario se usa como nombre de esquema.

En DB2 no hay usuarios de nivel de base de datos. Los usuarios del sistema operativo se utilizarán para iniciar sesión en la base de datos.

En mi base de datos tengo dos nombres diferentes para el usuario de la base de datos y el esquema de la base de datos.
Entonces, en django con db2 como backend, ¿cómo puedo usar un nombre de esquema diferente para acceder a las tablas?

EDITAR: Aclarando que estoy intentando acceder a través del ORM y no a los SQL sin procesar. El ORM implícitamente está usando el nombre de usuario como el nombre del esquema. ¿Cómo evito eso?

Respuestas

0 para la respuesta № 1

DB2 utiliza los llamados dos nombres de partes, schemaname.objectname. Se puede hacer referencia a cada objeto, incluidas las tablas, con el nombre completo. Dentro de una sesión, existe el esquema actual que, de forma predeterminada, se establece en el nombre de usuario. Puede ser cambiado por el SET SCHEMA myschema declaración.

Para su pregunta hay dos opciones: 1) Referencia las tablas con su nombre completo: schemaname.tablename 2) utilizar set schema para establecer el nombre de usuario común y hacer referencia solo a la tabla.


0 para la respuesta № 2

Tengo la solución para esto:

1) Podemos usar la siguiente consulta para cambiar el esquema en db2:

set schema schema_name;

2) Podemos ejecutar la consulta anterior al inicio de django. Tenemos que agregar el siguiente código en cualquiera de los archivos urls.py, manage.py que se ejecutarán en el inicio.

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)