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 :

Problème d'insertion d'informations dans la base de données


Sujet :

Python

  1. #1
    Membre éclairé
    Homme Profil pro
    Data Lover
    Inscrit en
    Décembre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Data Lover
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 96
    Par défaut Problème d'insertion d'informations dans la base de données
    Bonjour,

    Je débute en programmation et en Orienté Objet en faisant un petit programme (ajout, modification, suppression, affichage) des utilisateurs dans une base de données. L'affichage des employés de ma base marche sans problème par contre je bloque sur l'insertion. Le code de l'insertion s'exécute sans erreur mais les informations ne sont pas insérées dans la base données. J'ai aussi du mal à convertir un string au format date (2015-02-15, format du champ date dans MySQL).
    Voici mon code :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    from db_connection import * #Database importation
     
    class Employe:
        """Class with employe caracteritics and methods"""
     
        def __init__(self):
            """Default constructor
                Initialization of employe"""
            self.cursor = db_connection.db.cursor()
            self.nom = " "
            self.prenom = " "
            self.sexe = " "
            self.date_n = 0
            self.lieu_n = " "
     
        def afficher(self):# Method to print all data from database
            self.cursor.execute("SELECT * FROM employe")
            data = self.cursor.fetchall()
            for row in data:
                print("Identifiant :{}, Nom :{}, Prénom :{}, Sexe :{}, Date de naissance :{}, Ville :{}".
                      format(row[0], row[1], row[2], row[3], row[4], row[5]))
            """db_connection.db.close()"""
     
        def ajouter(self):# Method to add a employee into database
            print("Veuillez entrer vos informations : ")
            self.nom = input("Nom :")
            self.prenom = input("Prenom :")
            self.sexe = input("Sexe :")
            self.date_n = "2015-05-15"
            self.lieu_n = input("Lieu de naissance :")
            req = "INSERT INTO employe (nom, prenom, sexe, date_nais, lieu_nais) VALUES(%s, %s, %s, %s, %s)"
            self.arg = (self.nom, self.prenom, self.sexe, self.date_n, self.lieu_n)
            self.cursor.execute(req, self.arg)
            """db_connection.db.close()"""
    #Test
    if __name__ == "__main__":
        personne = Employe()
        personne.afficher()# Jusqu'ici tout marche
        personne1 = Employe() # Avant d'ajouter un employe, il faut d'abord le créer
        personne1.ajouter() # Appel de méthode pour ajout des informations 
        personne1.afficher() " M'affiche que les information de cette ligne : personne.afficher()
    Question : J'ai lu un cours sur l'Orienté Objet et pour le mettre en pratique, je fais des petits projets. Je pense qu'en faisant ainsi, je vais bien le comprendre, car s'il je trouve qu'il y a une notion que j'ai oubliée ou que je n'ai pas bien comprise, je relis la notion dans le cours. Alors, je me pose la question de savoir si selon vous si c'est une bonne façon bien avancer.

    Merci !

    PS : Je compte gérer des erreurs et des exceptions après. Je veux d'abord que vérifier que le code marche avant tout.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Salut,

    Citation Envoyé par master4 Voir le message
    par contre je bloque sur l'insertion. Le code de l'insertion s'exécute sans erreur mais les informations ne sont pas insérées dans la base données.
    Il faut lire la documentation du "pilote" utilisée mais dans la plupart des cas, AUTOCOMMIT est rarement le défaut. i.e. sans "commit", les changements ne sont pas enregistrés.

    Citation Envoyé par master4 Voir le message
    J'ai aussi du mal à convertir un string au format date (2015-02-15, format du champ date dans MySQL).
    Il faut ouvrir la documentation de MySQL pour savoir sous quel format une chaîne de caractères représentant une date sera convertie en "date"... ou utiliser un datetime Python et laisser le pilote faire la conversion.

    Citation Envoyé par master4 Voir le message
    Question : J'ai lu un cours sur l'Orienté Objet et pour le mettre en pratique, je fais des petits projets. Je pense qu'en faisant ainsi, je fais bien le comprendre, car s'il je trouve qu'il y a une notion que j'ai oubliée ou que je n'ai pas bien comprise, je relis la notion dans le cours. Alors, je me pose la question de savoir si selon vous si c'est une bonne façon bien avancer.
    C'est une bonne idée mais que ce soit programmation réseau ou base de données, il ne faut pas oublier que si vous écrivez du code en Python, l'expertise à avoir côté réseau ou SGDB n'a rien à voir avec le langage ou l'organisation OO du code.

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

  3. #3
    Membre éclairé
    Homme Profil pro
    Data Lover
    Inscrit en
    Décembre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Data Lover
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 96
    Par défaut
    Merci beaucoup Wiztricks ! ça a marché. Pour l'insertion dans la base données, effectivement, il manquait un commit.
    Il faut ouvrir la documentation de MySQL pour savoir sous quel format une chaîne de caractères représentant une date sera convertie en "date"... ou utiliser un datetime Python et laisser le pilote faire la conversion.
    La documentation dit bien que c'est le format date
    The DATE type is used for values with a date part but no time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format. The supported range is '1000-01-01' to '9999-12-31'.
    J'ai essayé de laisser Python faire la conversion, ça n'a pas marché non plus. Du coup, c'est ce code qui a marché :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.date_n = datetime.strptime(self.date_n, '%d/%m/%Y').strftime('%Y-%m-%d')

Discussions similaires

  1. Réponses: 9
    Dernier message: 10/04/2015, 15h01
  2. [MySQL] Problème d'insertion des accents dans une base de donnée MYSQL
    Par maroon1970 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/08/2011, 18h35
  3. Réponses: 7
    Dernier message: 27/06/2011, 14h38
  4. problème d'insertion des dates dans une base
    Par guy_antoine_mav dans le forum C#
    Réponses: 13
    Dernier message: 02/12/2009, 17h34
  5. [Conception] Problème d'insertion de tuples dans la base
    Par grumly22 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 11/05/2006, 09h02

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