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 :

Résultat d'un requête Oracle dans une vue


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 478
    Par défaut Résultat d'un requête Oracle dans une vue
    Bonjour,

    Je cherche à afficher le résultat d'une requête sur une base Oracle dans une vue.

    Dans mon settings.py, je modifie la variable DATABASES pour paramétrer l'accès à Oracle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'oracle': {
            "ENGINE": "django.db.backends.oracle",
            "NAME": "mabase",
            "USER": "monuser",
            "PASSWORD": "monpassword",
            "HOST": "monhost",
            "PORT": "monport",
        }
    Dans models.py, je crée mon modèle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from django.db import models
     
    class Project(models.Model):
        PJ_ID = models.IntegerField()
        PJ_NAME = models.CharField(max_length=50)
        PJDATE_CREATED = models.DateField()
     
        class Meta:
            db_table = 'matable'
            managed = False
     
        def __str__(self):
            return self.PJ_NAME
    Dans views.py, je crée ma vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    from .models import Project
    ...
    def project_listing2(request):
        projs = Project.objects.using("oracle").all().order_by('PJDATE_CREATED')
        return render(request, template_name='projectList.html', context={'projects': projs})
    Dans cette vue, j'ai une erreur sur le mot 'objects' avec le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unresolved attribute reference 'objects' for class 'Project'
    Qu'est ce qui cloche?

    Merci,
    Nico

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 679
    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 679
    Par défaut
    Citation Envoyé par DiverSIG Voir le message
    Qu'est ce qui cloche?
    Probablement la configuration de votre IDE... qui devrait être PyCharm. En cherchant avec le message d'erreur, une des solutions proposées devrait s'appliquer à votre configuration.

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

  3. #3
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 032
    Par défaut
    Bonjour,

    Comme managed=False, je pense que le gestionnaire de model Django n'est pas géré.

    Pour tester, on pourrait ajouter cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Project(models.Model):    
        PJ_ID = models.IntegerField()
        PJ_NAME = models.CharField(max_length=50)
        PJDATE_CREATED = models.DateField()
     
        objects = models.Manager()  # ajout du gestionnaire de model
     
        class Meta:
            db_table = 'matable'
            managed = False
     
        def __str__(self):         
            return self.PJ_NAME

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 478
    Par défaut
    Effectivement, cette commande supprime l'erreur sur 'objects'.
    Mais j'ai maintenant une autre erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-00942: table or view does not exist
    Il semble que ce soit dans la déclaration de ma table dans le settings.py, qui est de type nomduschema.nomdelatable

    Si je réécrit ma vue sans passer par les modèles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def project_listing(request):
        with connections['oracle'].cursor() as cur:
            cur.execute('alter session set current_schema = monschema')
            cur.execute('select PJ_ID, PJ_NAME, PJDATE_CREATED from monschema.matable')
     
            columns = [col[0] for col in cur.description]
            print(columns)
            print(cur.description)
            return JsonResponse([
                dict(zip(columns, row))
                for row in cur.fetchall()
            ], safe=False)
    J'arrive à voir mes données.
    Donc il faudrait paramétrer le settings.py pour qu'il exécute la commande alter session et qu'il se place automatiquement sur le bon schema.

    Comment faire ça?

    Nico

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 032
    Par défaut
    Bonjour,

    cur.execute('alter session set current_schema = monschema').
    J'arrive à voir mes données.
    le problème semble être lié au schéma ou aux droits d'accès dans la configuration de Django effectivement.

    Tu peux essayer d'utiliser les OPTIONS dans les settings de ta base

    'init_command': "ALTER SESSION SET CURRENT_SCHEMA = monschema",.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 478
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: 'init_command' is an invalid keyword argument for this function
    J'ai la dernière version de Django (5.0.1)
    Dans la doc, ils parlent surtout de mySQL, donc, pas dispo pour Oracle?

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 032
    Par défaut
    Et si tu remplaces ton ENGINE par django.db.backends.mysql ?

    J'ai vu cette solution pour résoudre le même message d'erreur avec SQLite3 !

Discussions similaires

  1. [2005] Requte Select dans une vue pour optenir un resultat detaille
    Par lamineba dans le forum Développement
    Réponses: 2
    Dernier message: 25/03/2013, 16h43
  2. [Oracle 9] variable hôte dans une vue
    Par doukem dans le forum Oracle
    Réponses: 1
    Dernier message: 08/11/2006, 16h26
  3. Réponses: 16
    Dernier message: 17/06/2005, 15h44
  4. Paramètres possibles dans une vue ms sql server
    Par lutin2003 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 30/03/2005, 19h03
  5. Insérer dans une Vue ordonnée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/09/2004, 15h27

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