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 :

Introduire une colonne SQLite3


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Introduire une colonne SQLite3
    Salut à tous, je suis tout nouveau sur ce forum alors petite présentation.

    Je m'appel Franck, je suis en prepa PTSI à l'ICAM et nous avons des cours d'informatiques où nous apprenons notamment le code Python.

    Je suis débutant dans le domaine et j'ai une question concernant les bases de données SQL. Nous utilisons SQLite3 et je "code" avec Pyzo.
    Mon but est de remplir des base de données et de la faire interagir entres-elles. Mon objectif est de créer 4 bases de données sur la gestion d'un aéroport (très simple) avec des tables qui se remplissent automatiquement, manuellement et semi-automatiquement.

    Mon problème est le suivant: Je demande à l'utilisateur d'entrer 4 données (aéroport de départ, aéroport d'arrivée, durée de vol, nb de vols hebdomadaires), les deux premières données le programme doit aller les chercher dans la deuxième base de données (pré remplis par l'utilisateur) et les deux dernière sont données par l'utilisateur. Or, je n'arrive pas à les introduire dans la base de données car :"
    cur.execute("INSERT INTO vols (aér_dep,aér_dest,durée,nb_hebdo)VALUES(?,?,?,?)",tu)
    sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.


    Je soupçonne les deux valeurs selectionnées à l'aide de la commande SELECT qui sont des Tuples. Bref, je vous donne le programme en espérant avoir de l'aide:

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    import sqlite3
    fichierdonnees ="D:/BDD/planning_général.sq3"
    conn=sqlite3.connect(fichierdonnees)
    cur=conn.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS compagnies (nom,hub_principal,flotte,indicatif)")
    cur.execute("CREATE TABLE IF NOT EXISTS aéroport (nom,pays,code_IATA)")
    cur.execute("CREATE TABLE IF NOT EXISTS vols (aér_dep,aér_dest,durée,nb_hebdo)")
    a=0
    while a!="stop":
        k=0
        a=int(input("Taper:\n 1 pour modifier la table compagnie\n 2 pour la table aéroport\n 3 pour la table vols\n 4 pour modifier une table\n 0 sinon: "))
    #remplissage des 3 tables de bases
        if a==1:
            while k!=".":
                n=input("entrer un nom de compagnie: ")
                p=input("entrer un hub: ")
                q=input("entrer la taille de la flotte: ")
                r=input("entrer un indicatif de compagnie (deux lettres majuscules): ")
                k=input("entrer [.] si vous avez terminé; presser <entrer> sinon")
                data=[(n,p,q,r)]
                for tu in data:
                    cur.execute("INSERT INTO compagnies (nom,hub_principal,flotte,indicatif)VALUES(?,?,?,?)",tu)
            conn.commit()
            cur.close()
            conn.close()
        if a==2:
            while k!=".":
                n=input("entrer un nom d'aéroport: ")
                p=input("entrer le nom du pays: ")
                q=input("entrer le code IATA: ")
                k=input("entrer [.] si vous avez terminé; presser <entrer> sinon")
                data=[(n,p,q)]
                for tu in data:
                    cur.execute("INSERT INTO aéroport (nom,pays,code_IATA)VALUES(?,?,?)",tu)
            conn.commit()
            cur.close()
            conn.close()
        if a==3:
            while k!=".":
                n=input("entrer le nom de l'aéroport de départ: ")
                p=input("entrer le nom de l'aéroport d'arrivé: ")
                q=input("entrer la durée du vol: ")
                r=input("entrer le nombre de vols hebdomadaires: ")
                k=input("entrer [.] si vous avez terminé; presser <entrer> sinon")
                data=[(n,p,q,r)]
                for tu in data:
                    cur.execute("INSERT INTO vols (aér_dep,aér_dest,durée,nb_hebdo)VALUES(?,?,?,?)",tu)
            conn.commit()
            cur.close()
            conn.close()
    #modifier une table
        if a==4:
            n=input("entrer le nom de la table à modifier: ")
            p=input("nom à remplacer: ")
            q=input("par: ")
            cur.execute("UPDATE n SET nom = q WHERE nom= p")
     
    #remplissage de la table vols semi-automatiquement
        if a==5:
            n=(input("entrer le nom de l'aéroport de départ: "),)
            p=(input("entrer le nom de l'aéroport d'arrivé: "),)
            cur.execute("SELECT nom FROM aéroport WHERE nom=?",n)
            q=cur.fetchone()
            print(q)
            print (type(q))
            cur.execute("SELECT nom FROM aéroport WHERE nom=?",p)
            r=cur.fetchone()
            print(r)
            print (type(r))
            s=input("entrer la durée du vol: ")
            t=input("entrer le nombre de vols hebdomadaires: ")
            k=input("entrer [.] si vous avez terminé; presser <entrer> sinon")
            data=[(q,r,s,t)]
            for tu in data:
                cur.execute("INSERT INTO vols (aér_dep,aér_dest,durée,nb_hebdo)VALUES(?,?,?,?)",tu)
            conn.commit()
            cur.close()
            conn.close()
        a=(input("entrer 'stop' si vous voulez arreter, presser <entrer> sinon: "))
    Il n'est pas finis bien sur, il faut taper 5 pour accepter à la boucle qui me pose problème (elle n'est pas proposé au début)

    Merci d'avance!

  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,

    Les instructions comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            cur.execute("SELECT nom FROM aéroport WHERE nom=?",n)
            q=cur.fetchone()
    (ligne 62 de votre script) retournent un tuple contenant ici une seule valeur puisque vous ne voulez qu'une colonne. Et c'est un tuple car dans le cas général on va récupérer plusieurs colonnes.

    Un peu plus loin (ligne 73), il faut faire:
    i.e. récupérer la valeur du premier élément du tuple.

    Sinon, l'insert:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           cur.execute("INSERT INTO vols (aér_dep,aér_dest,durée,nb_hebdo)VALUES(?,?,?,?)",tu)
    ne va pas faire cela pour vous: il se contente de raler...

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup wiztricks !! Je vais déjà appliquer les modifications que vous m'avez conseillé. Cependant cela continue de râler comme vous dites.

    J'ai découvert aussi tout à l'heure la fonction INSERT INTO SELECT qui rassemble finalement ce que je veux faire en une seule requête, vous savez comment je pourrais l'utiliser? J'ai essayé mais ca me renvoyer 4 lignes différent alors que je veux toutes mes entrées sur une seule ligne.

    Merci d'avance

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Problème résolu:

    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
    #remplissage de la table vols semi-automatiquement
        if a==5:
            n=(input("entrer le nom de l'aéroport de départ: "),)
            p=(input("entrer le nom de l'aéroport d'arrivé: "),)
            cur.execute("SELECT nom FROM aéroport WHERE nom=?",n)
            q=cur.fetchone()
            x=q[0]
            cur.execute("SELECT nom FROM aéroport WHERE nom=?",p)
            r=cur.fetchone()
            y=r[0]
            s=input("entrer la durée du vol: ")
            t=input("entrer le nombre de vols hebdomadaires: ")
            k=input("entrer [.] si vous avez terminé; presser <entrer> sinon")
            data=[(x,y,s,t)]
            for tu in data:
                cur.execute("INSERT INTO vols (aér_dep,aér_dest,durée,nb_hebdo)VALUES(?,?,?,?)",tu)
            conn.commit()
            cur.close()
            conn.close()
    Cependant, je pense qu'il doit y avoir des façons plus rapide d'y accéder. Si vous avez des idées je suis preneur, je dois rendre ce projet pour après les vacances de Paques, je ne suis donc pas pressé.

    Encore Merci pour votre aide.

Discussions similaires

  1. Ajout d'une colonne dans une table ...
    Par Djedjeridoo dans le forum SQL
    Réponses: 2
    Dernier message: 22/07/2003, 16h12
  2. Supprimer une colonne sous SQL Serveur 2000
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/07/2003, 12h24
  3. Check sur une colonne de table "en cours"
    Par in dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/07/2003, 09h47
  4. [PostGres] Suppresion d'une colonne.
    Par Gandalf24 dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/05/2003, 09h02
  5. [VB.NET] Insérer une colonne de CheckBox dans un DataGrid
    Par Manue.35 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2003, 11h44

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