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 № 1DB2 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)