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 :

postgresql - gestion des schémas [Python 3.X]


Sujet :

Django Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Points : 29
    Points
    29
    Par défaut postgresql - gestion des schémas
    ¡Ola!
    D'après la doc de psycopg, ça n'a pas l'air compliqué d'adresser des requêtes à une table dans schéma tartanpion, mais je ne comprend pas comment faire le lien dans django.
    Bref commençons par le commencement, la connexion à la base dans 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
    18
    19
    20
    21
    22
    23
    24
     
    # Database
    # https://docs.djangoproject.com/en/3.0/ref/settings/#databases
     
    DATABASES = {
        'default': {
    #        'ENGINE': 'django.db.backends.sqlite3',
              'ENGINE': 'django.db.backends.postgresql',
            #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            'NAME': 'djangotests',
            'USER':'katden',
            'PASSWORD':'mdp',
            'HOST': '127.0.0.1',
            'PORT': '5434',
        },
        'fermel' : {
            'ENGINE': 'django.db.backends.postgresql',  
            'NAME': 'fermel',
            'USER':'katden',
            'PASSWORD':'mdp',
            'HOST': '127.0.0.1',
            'PORT': '5434',
            }
    }
    Provoque une lecture du schéma public uniquement de la bdd fermel. Du coup j'aimerai bien savoir comment accéder au reste de la base de données fermel ... merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Katden Voir le message
    Du coup j'aimerai bien savoir comment accéder au reste de la base de données fermel ... merci
    Si vous voulez le faire côté Django, c'est construire le model à partir d'une base de données existante.
    Il doit aussi y voir des requêtes PostgreSQL pour récupérer çà (et passer la query à psycopg): à voir avec le forum PostgreSQL.

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

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Points : 29
    Points
    29
    Par défaut
    Merci.

    J'ai lu plusieurs fois cette aide mais il y manque des éléments selon moi. Par exemple il semblerait que l'on puisse préciser des options à DATABASE dans ce genre là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DATABASES = {
        'fermel' : {
            'ENGINE': 'django.db.backends.postgresql',
            'OPTIONS':{
                'schema1': '-c search_path=schema1',
                },   
            'NAME': 'fermel',
            .../ect/...
            }
    }
    Mais ce n'est pas documenté sur le site https://docs.djangoproject.com/fr/3....ting-DATABASES et présentement tel que je l'ai là écrit ça ne fonctionne pas. En plus ça supposerait une connexion distincte par schéma, ce qui peut être un problème je pense. Ça ne doit pourtant pas être loin de la vérité...

    Et sur le site de psycopg on nous explique bien que l'on peut passer tout un tas de comandes, mais leur intégration dans le setting ou ailleur d'une application django.... bernick ! C'est pas clair pour moi.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    search_path est une option PostgreSQL qui donne une liste de schemas dans lesquels rechercher une table.

    Après comment dire çà avec psycopg2 est documenté dans psycopg2 ici..

    Puis comment parler à psycopg2 depuis Django est .

    Je comprends que cela ne soit pas clair pour vous... mais passer un fil dans 3 aiguilles d'un seul coup demande de l’entraînement.

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

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Points : 29
    Points
    29
    Par défaut
    Bonjour,
    Merci bien encore.

    S'entraîner dis-tu ?... je n'en suis pas encore là moi! Pour l'instant j'en suis juste à comprendre qu'il y a 3 chats d'aiguille à aligner, et je ne trouve pas la mire pour le faire. Kerzut !

    J'avais lu là le https://docs.djangoproject.com/fr/3....etting-OPTIONS qui me dit que pour DATABASES je peux inclure des options...
    OPTIONS¶

    Valeur par défaut : {} (dictionnaire vide)

    Des paramètres supplémentaires à utiliser lors de la connexion à la base de données. Les paramètres disponibles varient en fonction du moteur de base de données.

    Certaines informations sur les paramètres disponibles peuvent être trouvées dans la documentation des moteurs de base de données. Pour plus d’informations, consultez la documentation propre au module du moteur utilisé.
    D'où j'en ai déduis que je pouvais effectivement passer directement une commande de psql , vu que le «module du moteur utilisé», psycopg, semble pouvoir interpréter directement les commandes postgres. Mais je m'y perd là !
    E.g : mon problème, vu de django, se connecter au bon schéma de la bonne base, je vais donc voir https://www.psycopg.org/docs/connection.html
    Franchement, je ne comprend pas comment mettre ce qui est là dans un settings de django, et de toutes façóns, je n'ai rien vu qui m'indique comment pointer un schéma.
    Cette page https://www.psycopg.org/docs/module.html te dis bien :
    Any other connection parameter supported by the client library/server can be passed either in the connection string or as a keyword. The PostgreSQL documentation contains the complete list of the supported parameters. Also note that the same parameters can be passed to the client library using environment variables
    Ce qui m'a fait penser que je pouvais écrire mon option telle que je l'ai écrite, ben non c'eut été trop simple !

    Bref, pas informaticien et somme toute pas très doué je tourne en rond autour des mes aiguilles, j'y perd mon fil, et n'en voit plus les trous. Et je trouve que ça pourrait être plus didactique pour les profanes tout ça.
    Alors ? ¿Comment k'cé t'y que je dois faire? hein !?

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Bonjour,

    avez-vous consulté ce lien lors de vos investigations ?

    Bases de données multiples avec Django

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Katden Voir le message
    Bref, pas informaticien et somme toute pas très doué je tourne en rond autour des mes aiguilles, j'y perd mon fil, et n'en voit plus les trous. Et je trouve que ça pourrait être plus didactique pour les profanes tout ça.
    Ce n'est pas fait pour les profanes!

    Le professionnel qui devra s'y coller pour la première fois y passera aussi du temps. Il essaiera un truc, si çà ne marche pas, il essaiera de comprendre le message d'erreur, relira les documentations pour comprendre pourquoi, cherchera sur Internet s'il est en panne d'idées, ou fera une pause à la machine à café,...

    La grosse différence sera côté rigueur, persévérance,... et dans son intelligence à décomposer le problème. Par exemple, au lieu d'essayer d'accéder au schéma directement depuis Django, il essaiera (peut être) d'y accéder depuis psycopg2 directement (une aiguille en moins à traverser) et peut être que des idées vont surgir de cet essai.

    Programmer est un art de la résolution de problèmes, l'important est dans la démarche suivie pour les résoudre (et si on a la solution a tout à priori, pas besoin de démarche).

    Comme on ne peut pas accéder à votre base de données, on ne sera pas plus intelligent que les exemples que vous pourrez trouver sur Internet. Si çà ne marche pas, c'est qu'il y a (peut être) quelque chose de spécifique à votre configuration.

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

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Arioch Voir le message
    Bonjour,

    avez-vous consulté ce lien lors de vos investigations ?

    Bases de données multiples avec Django
    Oui oui j'ai commencé par là. Merci quand-mème.
    On y expliquer très bien le cas basique. J'en recommande la lecture.

    @wiztricks bon voilà... petit scarabée va prendre son mal en patience et tenter de devenir pro sans fane. Comme je me sentais un peu démuni, je pensais que je trouverai ici un gars qui ait résolu se problème et m'expliquerai comment ça se résould, certain que c'est vraiment le truc de base quand-même avec postgres de jouer sur les schémas. En tous cas si j'y arrive, mais pas pro je n'ai pas 8h/jr à y consacrer, je viendrait compléter ce fil de discussion.

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    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 : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    Bonjour,

    Vous pouvez utiliser search_path comme indiqué par @wiztricks et y indiquer les schemas.

    https://stackoverflow.com/a/39322184/1125315

    Ne pas oublier la commande python manage.py migrate pour finir.

    Bonne continuation...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Points : 29
    Points
    29
    Par défaut
    Adieusiatz (bonjour tout le monde en occitan),

    Rhââ lovely !

    Alors pour les futurs profanes de mon genre, et les pro en herbe, j'étais donc effectivement pas loin de la vérité, c'est ma satisfaction. Mon problème était le manque de rigueur :
    1. ne pas confondre
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      django.db.backends.postgresql
      et
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       django.db.backends.postgresql_psycopg2
    2. le mot clé «options» n'est pas «option»


    Moyennant quoi cela fonctionne très bien. Le plus, est qu'il y a même une possibilité de cibler le schéma selon l'utilisateur qui se connecte : https://www.amvtek.com/blog/posts/20...s-from-django/

    Grand merci à vous, A lèu («à bientôt», toujours dans le même langue, dite romane dans les ouvrages d'histoire de France traitants du haut moyen âge)

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/08/2011, 10h59
  2. Gestion des dates avec PostgreSQL 8
    Par Goldorak59 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 30/08/2007, 07h54
  3. [PostgreSQL] Gestion des erreurs
    Par e1lauren dans le forum JDBC
    Réponses: 4
    Dernier message: 21/08/2006, 03h22

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