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 :

Questions débutant sqlite3/python2.5


Sujet :

Python

Vue hybride

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Par défaut Questions débutant sqlite3/python2.5
    Bonjour à tous,
    j'ai une fenêtre de saisies avec Tkinter ( nom, prénom, date etc...)
    Je veux enregistrer cette "Base" avec Sqlite3. Mes saisies sont en mémoire (Nom, Prénom,Date, etc...)
    J'ai trouvé des infos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import sqlite3
    import os
    database_name = "essaidb.db"
    if not os.path.isfile(database_name):
        print "database est crée "
    db_connection = sqlite3.connect(database_name)
    cur = db_connection.cursor()
    #cur.execute("CREATE TABLE IF NOT EXISTS clients (id INT, text TEXT)")  # Création d'une table
    cur.execute("CREATE TABLE IF NOT EXISTS clients ( id integer, NOM varchar, AGE integer)")  # Création d'une table
    cur.execute ("insert into clients(id, NOM, AGE) values (0, 'Mac', 50)")
    cur.execute ("insert into clients(id, NOM, AGE) values (1, 'Mic', 51)")
    db_connection.commit()
    db_connection.close()
    Ca fonctionne, mais c'est moi qui entre les valeurs, je n'arrive pas à touver la syntaxe pour enregistrer mes variables.Ni la liste des fonctions qui permettent la gestion de cette base( insertion, recherche, etc).
    Et apparemment le format date n'est pas pris en charge, il faut le transformer en string?

    Je sais pas si je suis clair?

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonsoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for data in [(0, 'Mac', 50), (1, 'Mic', 51)]:
        c.execute('insert into clients(id, NOM, AGE) values (?,?,?)', data)
    les fonctions de recherche, insertion, etc il n'y en a pas. je crois que tout passe par des execute avec des requêtes sql.

    en ce qui concerne les dates:

    http://docs.python.org/library/sqlit...apter-callable

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Par défaut Merci Kango
    Merci de ton aide, j'ai économisé beaucoup de temps. Ca fonctionne.
    Toutefois je ne comprends pas l'utilité de la boucle? (sans, ça fonctionne pas)
    Autre question pour finr peut etre...

    Maintenant dans une fenetre, je saisie "ID" (qui est un code barre, mais peut importe) et je veux avoir acces à la bdd, pour changer des champs, et bien sur les enregistrer.Avec Tkinter toujours.
    Avec execute? je suppose mais je n'arrive pas à touver les possibilité de execute? Et en plus il fait chaud!

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    non, la boucle n'est pas indispensable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute('insert into clients(id, NOM, AGE) values (?,?,?)', (0, 'Mac', 50))
    pour rechercher on utilise un execute avec une instruction select, et c'est une instruction update pour mettre à jour:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    c.execute("SELECT id, NOM, AGE FROM clients WHERE id = ?", id)
    res = c.fetchall()
     
    c.execute("UPDATE clients SET NOM = ?, AGE = ? WHERE id = ?", ('Mac', 50, 0))

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

    Toutefois je ne comprends pas l'utilité de la boucle? (sans, ça fonctionne pas)
    La boucle remplace les deux lignesi nitiales:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cur.execute ("insert into clients(id, NOM, AGE) values (?,?,?)", (0, 'Mac', 50))
    cur.execute ("insert into clients(id, NOM, AGE) values (?,?,?)", (1, 'Mic', 51))
    Mais on aurait pu écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    li = [(0, 'Mac', 50), (1, 'Mic', 51)]
    cur.executemany("insert into clients(id, NOM, AGE) values (?,?,?)", li)
    Maintenant dans une fenetre, je saisie "ID" (qui est un code barre, mais peut importe) et je veux avoir acces à la bdd, pour changer des champs, et bien sur les enregistrer.Avec Tkinter toujours.
    execute permet d'exécuter n'importe quelle requête SQL mais il faut investir un peu dans SQL pour 'être à l'aise' dans le codage des requêtes SQL qu'on lui passe.

    Si vous n'êtes pas à l'aise avec SQL, je vous recommande de jeter un oeil à Elixir. Ca va habiller vos requêtes SQL de sorte que vous pourrez oublier la requête, le type de base de données, et disposer d'une API plus proche de Python pour effectuer recherches, créations et mises à jour.

    Pour débuter et traiter ce que vous avez présenté, les informations qui sont dans le tuto sont largement suffisantes.

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

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Par défaut Je tourne en rond
    Bonjour à tous et merci de votre aide.
    Suivant les conseils, je me mets à SQL. Mon probleme actuel :
    J'ai une table Sqlite3 crée :
    cur.execute("CREATE TABLE IF NOT EXISTS CLIENTS(CB,DATE, NOM , PRENOM, ADRESSE,CP,VILLE,TEL,PORTABLE,MAIL,NAISSANCE,VISITE,MONTANT,DATE_DERNIERE_VISITE,CUMUL,POINTS,PRELEVEMENT,DATE_DERNIER_PRELEVEMENT,RESTE) ")
    J'ai une fentre de saisie : CB; si CB existe, je voudrais ouvrir une nouvelle fenetre avec tous les champs de la table.
    Je plante déjà là!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def verif() :
            CB = saisieCB.get()
            FichierFidelCard = "FIDELCARD.db"
            db_connexion = sqlite3.connect(FichierFidelCard)
            cur = db_connexion.cursor()
     
     
            cur.execute("SELECT  CB  from  clients WHERE CB = ?",CB)
            resultat = cur.fetchall()
            #cur.execute("UPDATE CLIENTS SET NOM= ?, PRENOM =?, WHERE CB = ?, (NOM, PRENOM,CB))
            print resultat
            db_connexion.close()
    Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.
    Je modifie tout et ça marche pas...

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut
    Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.
    Vous ne dites pas quelle ligne mais que contient CB?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Question débutant: Affiche vertical et horizontal
    Par Hijack54 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 09/02/2007, 13h24
  2. Réponses: 18
    Dernier message: 04/04/2006, 14h31
  3. question débutant xsl
    Par irnbru dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 30/03/2006, 18h20
  4. Question débutant ...
    Par Lypertrophie dans le forum Débuter
    Réponses: 4
    Dernier message: 25/10/2005, 19h00
  5. Réponses: 3
    Dernier message: 26/05/2004, 23h03

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