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 :

Une fonction pour écrire dans une base de données


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 7
    Points : 0
    Points
    0
    Par défaut Une fonction pour écrire dans une base de données
    Bonjour à tous !

    Je débute en Python et j'ai décidé aujourd'hui de faire un petit projet perso de caisse enregistreuse utilisant la base de donnée sqlite3.
    j'arrive à créer une base de donnée, une table et à écrire dedans. Je n'arrive cependant pas à créer une fonction me permettant d'écrire dans ma table avec 3 arguments
    je vous laisse mon bout de code et l'erreur qui est retourné :

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import sqlite3
    def adprod (ID,name,price):
        conn = sqlite3.connect('main.db')
        c = conn.cursor()
        c.execute("INSERT INTO product VALUES (ID,name,price)")
        conn.commit()
        conn.close()
     
    adprod (7,coca,2)

    et ici l'erreur retournée :

    File "\test.py", line 9, in <module>
        adprod (7,coca,2)
    NameError: name 'coca' is not defined

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Salut,

    Tu n'as pas mis de guillemets autour de coca, donc il cherche la variable coca qui n'est pas définie, d'où l'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import sqlite3
     
    def adprod (ID,name,price):
      conn = sqlite3.connect('main.db')
      c = conn.cursor()
      c.execute("INSERT INTO product VALUES (ID,name,price)")
      conn.commit()
      conn.close()
     
    adprod (7,"coca",2)
    Cela devrait marcher je pense.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    merci pour la réponse, j'avais également essayé entre temps mais j'ai eu d'autre erreur :

     File "\test.py", line 8, in <module>
        adprod (5,"coca",2)
      File "C:\test.py", line 5, in adprod
        c.execute("INSERT INTO product VALUES (ID,name,price)")
    sqlite3.OperationalError: no such column: ID

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    C'est parce que ta commande SQL est une chaine de caractère, donc la il essaye d'executer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO product VALUES (ID,name,price)
    Or tu veux qu'il fasse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO product VALUES (7,"coca",2)
    Il faut donc que tu concatènes tes variables a l'intérieur de la requete SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute("INSERT INTO product VALUES ("+str(ID)+","+str(name)+","+str(price)+")")

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Toujours un petit hic :

    File "C:\test.py", line 5, in adprod
        c.execute ("INSERT INTO product VALUES("+str(ID)+","+str(name)+","+str(price)+")")
    sqlite3.OperationalError: no such column: coca

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Autant pour moi, j'ai oublié des apostrophes!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute("INSERT INTO product VALUES ("+str(ID)+","'+str(name)+'","+str(price)+")")

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par RasJah Voir le message
    Autant pour moi, j'ai oublié des apostrophes!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute("INSERT INTO product VALUES ("+str(ID)+","'+str(name)+'","+str(price)+")")
    je ne m'en sort pas XD
    j'ai ré-écrit le code avec ta modif :

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import sqlite3
    def adprod (ID,name,price):
        conn = sqlite3.connect('main.db')
        c = conn.cursor()
        c.execute("INSERT INTO product VALUES ("+str(ID)+","'+str(name)+'","+str(price)+")")
        conn.commit()
        conn.close()
    adprod (5,"coca",2)

    et la j'ai l'erreur :

    c.execute("INSERT INTO product VALUES ("+str(ID)+","'+str(name)+'","+str(price)+")")
    sqlite3.OperationalError: near ",": syntax error
    Si j'enlève les guillemets dans l'argument :
    NameError : name 'coca' is not defined


  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    pour info le code pour créer ma table :

    Code Python : 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
    import sqlite3
    conn = sqlite3.connect('main.db')
    c = conn.cursor()
    # Create table
    c.execute('''CREATE TABLE IF NOT EXISTS product
                 (ID int primary key, name text UNIQUE, price REAL)''')
     
    c.execute("INSERT INTO product VALUES (1,'Baguette', 0.80)")
    c.execute("INSERT INTO product VALUES (2,'Pain', 1.50)")
    c.execute("INSERT INTO product VALUES (3,'Croissant', 1.10)")
    c.execute("INSERT INTO product VALUES (4,'P.Chocolat', 1.20)")
    conn.commit()
     
    print ("Base de données créer avec succès")
     
    conn.close()

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Essaye de comprendre la concaténation plutot que de recopier (betement) ce que je t'envoie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute("INSERT INTO product VALUES ("+str(ID)+",'"+str(name)+"',"+str(price)+")")
    Ca devrait être mieux dans ce sens

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par RasJah Voir le message
    Essaye de comprendre la concaténation plutot que de recopier (betement) ce que je t'envoie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute("INSERT INTO product VALUES ("+str(ID)+",'"+str(name)+"',"+str(price)+")")
    Ca devrait être mieux dans ce sens
    Sympathique .....

  11. #11
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    La façon d'insérer des valeurs dans une table sqlite est décrite dans la doc.

    https://docs.python.org/3/library/sqlite3.html

    Soit dans ton code, cela devrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute('INSERT INTO product (ID, name, price) VALUES(?, ?, ?)', (ID, name, price))
    Et conseil, dans ta fonction vérifie le type des arguments reçus en paramètre avant d’enregistrer.
    Le temps ronge l'amour comme l'acide.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Super merci Bistouille ta syntaxe est nettement plus clair !
    effectivement je dois perfectionner la fonction ainsi que l'incrémentation automatique l'ID.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/05/2015, 11h49
  2. Objet existant reconnu dans une fonction mais pas dans une autre
    Par Jiyuu dans le forum Général Python
    Réponses: 0
    Dernier message: 20/09/2011, 18h19
  3. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  4. [Dojo] Objet Dojo créé dans une fonction et utilisé dans une autre.
    Par hapalemur dans le forum Bibliothèques & Frameworks
    Réponses: 10
    Dernier message: 05/06/2009, 13h59
  5. Réponses: 2
    Dernier message: 29/08/2007, 19h43

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