Bonjour à tous,


Comme dit dans le titre je souhaite lier une base de donnée externe sur laquelle j'ai des droits en lecture seulement à mon projet Django pour ensuite uniquement lui envoyer des requêtes SQL brutes et utiliser les résultats.

J'ai donc créé une seconde table dans les settings du projet (car j'ai quand même besoin de la Base par defaut)

settings.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    },
    'oracleDB':{
        'ENGINE': 'django.db.backends.oracle',
        'NAME': 'my_dsn',
        'USER': 'my_user',
        'PASSWORD': 'my_password',
        'HOST': 'my_host',
        'PORT': 'my_port',
        'OPTIONS':{
            'threaded':True
        }
    }
Puis dans mon view je l'appelle de cette façon (vu sur un forum):

views.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
from django.db import connections
def my_function(request):
    with connections['oracleDB'].cursor() as cur:
        cur.execute( "SOME SQL QUERY")
        print(cur.fetchall())
Et j'obtiens une erreur de type
DPI-1047: Cannot locate a 64-bit Oracle Client library: “C:\ProgramData\Oracle12c\product\12.1.0\client_1\bin\oci.dll is not the correct architecture”. See cx_Oracle 8 Installation — cx_Oracle 8.3.0 documentation for help
Alors je sais bien que j'ai besoin du client Oracle pour me connecter, je l'utilisais avant dans la connexion avec le package cx_Oracle et ça fonctionnait bien. Sauf que maintenant je me connecte avec Django et ses settings dans lequels je ne peux pas spécifier le chemin vers mon instantclient Oracle.

Auriez vous une idée de comment permettre à Django de détecter ce client ?

Je suis sous Windows mais si vous avez aussi le moyen sous Linux je suis preneur des deux méthodes.


Merci d'avance, n'hésitez pas si vous voulez des précisions