IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Liaison d'une BDD Oracle externe à un projet Django [Python 3.X]


Sujet :

Django Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Septembre 2021
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2021
    Messages : 55
    Par défaut Liaison d'une BDD Oracle externe à un projet Django
    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

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 759
    Par défaut
    Salut,

    Le message d'erreur est explicite non?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Septembre 2021
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2021
    Messages : 55
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Le message d'erreur est explicite non?

    - W
    J'ai été lire l'aide déjà et je ne pense pas que ce soit adapté à mon cas, c'est très générique je pense qu'il doit y avoir un moyen plus simple ici.
    C'est pour ça que je cherche l'expertise de quelqu’un qui a déjà connecté une base de données externe à un projet Django.

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    Ne serait-ce pas une histoire de routage ?

    https://docs.djangoproject.com/fr/3....s/db/multi-db/

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par défaut
    bonjour

    Avec une simple recherche web, on trouve pas mal de littérature ... django oracle DPI-1047 et comme indique l'erreur "64-bit ... is not the correct architecture", c'est un problème d'install oracle (client) et pas un problème python

    mais si vous avez aussi le moyen sous Linux
    ? pas compris, tu as la même erreur ? je suppose que ton serveur linux et 64 bits...

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 759
    Par défaut
    Citation Envoyé par Arioch Voir le message
    Ne serait-ce pas une histoire de routage ?
    Si c'est le cas, créer un petit projet Django n'utilisant qu'Oracle permettra de le confirmer (ou pas..).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre confirmé
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Septembre 2021
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2021
    Messages : 55
    Par défaut
    Merci pour votre implication

    Citation Envoyé par Arioch Voir le message
    Ne serait-ce pas une histoire de routage ?

    https://docs.djangoproject.com/fr/3....s/db/multi-db/
    D'après moi si l'erreur actuelle est de chercher le client Oracle c'est que Django a bien compris de quelle base de données il s'agit et cherche à s'y connecter. Le problème doit venir de client et de son lien avec le projet.
    Avant cette méthode j'utilisais la connexion a la BDD par cx_Oracle en Python et je spécifiait bien le chemin vers le client. Ça fonctionnait sans problème donc la version du client est la bonne déjà.

    Citation Envoyé par papajoker Voir le message
    bonjour

    Avec une simple recherche web, on trouve pas mal de littérature ... django oracle DPI-1047 et comme indique l'erreur "64-bit ... is not the correct architecture", c'est un problème d'install oracle (client) et pas un problème python


    ? pas compris, tu as la même erreur ? je suppose que ton serveur linux et 64 bits...
    Actuellement mon projet est sous Windows 10 64bits et j'ai bien le bon client Oracle pour ça. En revanche en production le projet sera sous linux 4.19 64bits.

    Citation Envoyé par wiztricks Voir le message
    Si c'est le cas, créer un petit projet Django n'utilisant qu'Oracle permettra de le confirmer (ou pas..).

    - W
    Et bien c'est déjà le cas j'ai un projet en local sous windows 10 64bits actuellement et c'est sur lui que j'essaie de résoudre l'erreur de client.

  8. #8
    Membre confirmé
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Septembre 2021
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2021
    Messages : 55
    Par défaut
    C'est bon j'ai finalement résolu mon problème en ajoutant

    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
    17
    import cx_Oracle
    cx_Oracle.init_oracle_client(lib_dir="my_path_to_oracle_client")
     
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        },
        'oracleDB':{
            'ENGINE':'django.db.backends.oracle',
            'NAME':(
                '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=my_host)(PORT=my_port))'
                '(CONNECT_DATA=(SERVICE_NAME=my_service)))'
            ),
            'USER':'my_user',
            'PASSWORD':'my_password',
        }
    J'ai donc ajouté l'initialisation du client par cx_Oracle directement dans les settings de Django et j'ai modifié mon NAME qui ne permettait pas la reconnaissance de la base avant ça.

    Pour le requêtage de la base ensuite je fais comme ça :

    views.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    from django.db import connections
     
    with connections['oracleDB'].cursor() as cur:
            cur.execute("""MY_SQL_QUERY""")

    N'hésitez pas si vous pensez avoir une meilleure solution.
    Merci pour votre implication

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connexion à une bdd Oracle
    Par Mayhem dans le forum Struts 1
    Réponses: 3
    Dernier message: 11/08/2006, 14h33
  2. Obtenir le MCD a partir d'une BDD Oracle, possible?
    Par dipajero dans le forum Designer
    Réponses: 7
    Dernier message: 06/01/2006, 20h48
  3. Réponses: 28
    Dernier message: 28/07/2005, 14h12
  4. Créer une BDD Oracle sur windows
    Par calimero82 dans le forum Administration
    Réponses: 7
    Dernier message: 25/10/2004, 15h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo