/ / django-db2 używa innej nazwy schematu niż nazwa użytkownika bazy danych - django, python-2.7, django-models, db2

django-db2 używa innej nazwy schematu niż nazwa użytkownika bazy danych - django, python-2.7, django-models, db2

W bazie danych Django nazwa użytkownika jest używana jako nazwa schematu.

W DB2 nie ma użytkowników na poziomie bazy danych. Użytkownicy systemu operacyjnego zostaną zalogowani do bazy danych.

W mojej bazie danych mam dwie różne nazwy użytkownika bazy danych i schematu bazy danych.
Więc w django z db2 jako backendem, w jaki sposób mogę użyć innej nazwy schematu, aby uzyskać dostęp do tabel?

EDYTOWAĆ: Wyjaśnienie, że próbuję uzyskać dostęp za pośrednictwem ORM, a nie surowych SQL-ów. ORM domyślnie używa nazwy użytkownika jako nazwy schematu. Jak tego uniknąć?

Odpowiedzi:

0 dla odpowiedzi № 1

DB2 używa tak zwanych dwóch nazw części, schemaname.objectname. Do każdego obiektu, w tym tabel, może odnosić się cała nazwa. W ramach sesji znajduje się bieżący schemat, który domyślnie jest ustawiony na nazwę użytkownika. Można to zmienić za pomocą SET SCHEMA myschema komunikat.

W przypadku twojego pytania są dwie opcje: 1) Odwołaj się do tabel z ich pełną nazwą: schemaname.tablename 2) Użyj set schema aby ustawić wspólny schemat i odwołać się tylko do tabeli.


0 dla odpowiedzi nr 2

Mam na to rozwiązanie:

1) Możemy użyć następującego zapytania, aby zmienić schemat w db2:

set schema schema_name;

2) Możemy wykonać powyższe zapytanie przy uruchomieniu django. Musimy dodać następujący kod w dowolnym pliku urls.py, manage.py, który uruchomi go podczas uruchamiania.

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)