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

Python Discussion :

import méthode et connexion base de données


Sujet :

Python

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut import méthode et connexion base de données
    Bonjour

    première question qui porte sur les bons usages sur l'appel de méthode d'un autre module.
    Laquelle doit être utilisée?

    Première façon de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from module2 import *
    ...
    methode_module2(arg)
    Deuxième façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import module2
    .....
    module2.methode_module2(arg)
    Ma deuxième question est par rapport à la gestion du module de connexion à la base de données.
    Pour éviter de reprendre plusieurs fois une partie du code j'ai crée une methode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def connexion():
        " Connexion à la base de données BD_GESMAT.db3 "
        conn = sqlite3.connect("BD_GESMAT.db3")
        c = conn.cursor()
    Ensuite quand je fais une requête, j'ai un message d'horreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def ajt_materiel(itemajt1, itemajt2):
        " Méthode pour ajouter du matériel dans la base de données  "
        connexion()
        c.execute("INSERT INTO MATERIEL (modele, marque) VALUES ('?', '?')", (itemajt1, itemajt2))
        conn.commit()
        conn.close()
    c.execute("INSERT INTO MATERIEL (modele, marque) VALUES ('?', '?')", (itemajt1, itemajt2))
    NameError: global name 'c' is not defined
    comment faire pour gérer cette connexion sans devoir ajouter systématiquement les lignes de connexion à la base avant une requête ?

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    Pour la deuxième partie je pense avoir compris comment faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def connexion(requete):
        " Connexion à la base de données BD_GESMAT.db3 "
        conn = sqlite3.connect("BD_GESMAT.db3")
        c = conn.cursor
        c.execute(requete)
        conn.commit()
        conn.close()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def ajt_materiel(itemajt1, itemajt2):
        " Méthode pour ajouter du matériel dans la base de données "
        connexion("INSERT INTO MATERIEL (modele, marque) VALUES ('?', '?')", (itemajt1, itemajt2))

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    L'importation anonyme n'est pas appréciée pour deux raisons, d'abord tu importes tout le contenu du module et peut-être beaucoup de choses pour rien et ensuite c'est justement cet anonymat qui est gênant.

    Lorsque l'on rencontre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    methode_module2(arg)
    [/code]
    on ne sait pas d'où sort cette méthode et tu obliges le lecteur de ton code à ouvrir tous les modules importés avec l'* pour savoir ce qu'est cette fonction, ce qu'elle fait, etc.

    Pour ta base de données ta première méthode était bonne il suffisait de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    def connexion():
        " Connexion à la base de données BD_GESMAT.db3 "
        conn = sqlite3.connect("BD_GESMAT.db3")
        return conn.cursor()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def ajt_materiel(itemajt1, itemajt2):
        " Méthode pour ajouter du matériel dans la base de données  "
        c = connexion()
        c.execute("INSERT INTO MATERIEL (modele, marque) VALUES ('?', '?')", (itemajt1, itemajt2))
        conn.commit()
        conn.close()

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    merci pour ta réponse.

    effectivement je trouve aussi que l'importation anonyme n'est terrible.

    Pour la base de donnée, je me doutais qu'il fallait faire un return, mais je ne le faisait pas comme il faut.
    Je vais essayer ça.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    j'ai un message d'erreur en faisant comme ça:

    in ajt_caisse
    conn.commit()
    NameError: global name 'conn' is not defined

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    J'avais essayé comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     connexion():
        " Connexion à la base de données BD_GESMAT.db3 "
        conn = sqlite3.connect("BD_GESMAT.db3")
        c = connexion()
        return c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def ajt_materiel(itemajt1, itemajt2):
        " "
        c.execute("INSERT INTO MATERIEL (modele, marque) VALUES (?, ?)",(itemajt1, itemajt2))
        conn.commit()
    mais j'ai le même type d'erreur

    in ajt_caisse
    c.execute("INSERT INTO MATERIEL (modele, marque) VALUES (?, ?)",(itemajt1, itemajt2))
    NameError: global name 'c' is not defined

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    def connexion():
        " Connexion à la base de données BD_GESMAT.db3 "
        return sqlite3.connect("BD_GESMAT.db3")
    et:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def ajt_materiel(itemajt1, itemajt2):
        " Méthode pour ajouter du matériel dans la base de données  "
        conn = connexion()
        c = conn.cursor()
        c.execute("INSERT INTO MATERIEL (modele, marque) VALUES ('?', '?')", (itemajt1, itemajt2))
        conn.commit()
        conn.close()

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    Dans ce cas, juste pour économiser une ligne, je vais me passer de cette méthode de connexion(). je vais essayer de voir pour fouiller l'autre façon que j'avais envisagé.

    mais marci quand même pour ta réponse et pour ton temps.

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/04/2005, 14h12
  2. [Tomcat][Oracle] connexion base de donnes debutant....
    Par yogz dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 16/07/2004, 13h32
  3. Réponses: 4
    Dernier message: 17/02/2004, 08h36
  4. [XMLRAD] Connexion Base de données Informix
    Par clisson dans le forum XMLRAD
    Réponses: 3
    Dernier message: 14/01/2003, 13h46
  5. connexion base de donné
    Par saidi dans le forum MFC
    Réponses: 3
    Dernier message: 07/08/2002, 22h22

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