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 :

Python avec sqlite


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 139
    Points : 26
    Points
    26
    Par défaut Python avec sqlite
    bonjour,
    J'ai crée un formulaire avec PyQt4 et je voudrais le relier avec sqlite3 mais je reçois l'erreur: ValueError: parameters are of unsupported type

    voila 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
        def insertDataPatient(self):
            Nom = self.Nom_lineEdit
            Prenom = self.Prenom_lineEdit
            Date_naissance = self.naissance_dateEdit
            Numero_SS = self.Numero_SS_lineEdit
            Telephone = self.Telephone_lineEdit        
            Email = self.Email_lineEdit
            Genre = "Homme"
            if self.Homme_radioButton == True:
                Genre = "Homme"
            if self.Femme_radioButton == True:
                Genre = "Femme"       
            Poids = self.Poids_lineEdit
            Taille = self.Taille_lineEdit
            Adresse = self.Adresse_lineEdit      
            Docteur = self.Docteur_lineEdit
            Date = self.dateEdit
            Description = self.Description_TextEdit  
            connection  = sqlite3.connect("patient_form.db")
            #connection.executemany("INSERT INTO PATIENT_TAB VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)",(Nom, Prenom, Date_naissance, Numero_SS, Telephone, Email, Genre, Poids, Taille, Adresse, Docteur, Date, Description))
            connection.executemany("""
            INSERT INTO PATIENT_TAB(Nom, Prenom, Date_naissance, Numero_SS, Telephone, Email, Genre, Poids, Taille, Adresse, Docteur, Date, Description) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)""", (Nom, Prenom, Date_naissance, Numero_SS, Telephone, Email, Genre, Poids, Taille, Adresse, Docteur, Date, Description))
            connection.commit()
            connection.close()
    et voila le code la base de données:
    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
    import sqlite3
     
    def createTable():
        connection = sqlite3.connect('patient_form.db')
     
        connection.execute("CREATE TABLE PATIENT_TAB(Nom TEXT NOT NULL, Prenom TEXT NOT NULL, Date_naissance INTEGER, Numero_SS TEXT NOT NULL, Telephone TEXT, Email TEXT, Genre TEXT, Poids TEXT, Taille TEXT, Adresse TEXT, Docteur TEXT, Date INTEGER, Description TEXT)")
     
        #connection.execute("INSERT INTO PATIENT_TAB VALUES(?,?,?)",('ajayssj4','ajay@gmail.com','ajayajay'))
     
        connection.commit()
     
        result = connection.execute("SELECT * FROM PATIENT_TAB")
     
        for data in result:
            print("Nom : ",data[0])
            print("Prenom : ",data[1])
            print("Date_naissance :",data[2])
            print("Numero_SS : ",data[3])
            print("Telephone : ",data[4])
            print("Email :",data[5])
            print("Genre : ",data[6])
            print("Poids : ",data[7])
            print("Taille :",data[8])
            print("Adresse : ",data[9])
            print("Docteur : ",data[10])
            print("Date :",data[11])
            print("Description :",data[12])
        connection.close()
     
    createTable()
    Pouvez vous m'aider svp
    Merci.

  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,

    .executemany attend une liste de... si vous lui passez un seul enregistrement, il fera ce qu'il peut... et çà ne plantera pas forcément avec un message intelligible.

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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 139
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    .executemany attend une liste de... si vous lui passez un seul enregistrement, il fera ce qu'il peut... et çà ne plantera pas forcément avec un message intelligible.

    - W
    Est ce que vous pouvez m'expliquer plus. je n'ai pas compris.
    quand je supprime many, je reçois l'erreur: sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.

  4. #4
    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
    Citation Envoyé par zsoufianz Voir le message
    est ce que vous pouvez m'expliquer plus. je n'ai pas compris
    En fait, il n'y a rien à comprendre.
    Vous devez lire la documentation d'executemany et expliquer pourquoi l'instruction que vous avez écrite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    connection.executemany("""
            INSERT INTO PATIENT_TAB(Nom, Prenom, Date_naissance, Numero_SS, Telephone, Email, Genre, Poids, Taille, Adresse, Docteur, Date, Description) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)""", (Nom, Prenom, Date_naissance, Numero_SS, Telephone, Email, Genre, Poids, Taille, Adresse, Docteur, Date, Description))
    devrait fonctionner.

    Pour moi, comme il n'y a qu'un record, .execute serait largement suffisant. Mais rien ne vous interdit de passer une liste d'un seul record à executemany. Donc çà pourrait tomber en marche... mais c'est à vous de savoir ce que vous voulez faire...

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

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 139
    Points : 26
    Points
    26
    Par défaut mais ni execute ni executemany marche !!! je ne sais pas si le problem est au niveau de la fonction ou autres
    Citation Envoyé par wiztricks Voir le message
    En fait, il n'y a rien à comprendre.
    Vous devez lire la documentation d'executemany et expliquer pourquoi l'instruction que vous avez écrite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    connection.executemany("""
            INSERT INTO PATIENT_TAB(Nom, Prenom, Date_naissance, Numero_SS, Telephone, Email, Genre, Poids, Taille, Adresse, Docteur, Date, Description) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)""", (Nom, Prenom, Date_naissance, Numero_SS, Telephone, Email, Genre, Poids, Taille, Adresse, Docteur, Date, Description))
    devrait fonctionner.

    Pour moi, comme il n'y a qu'un record, .execute serait largement suffisant. Mais rien ne vous interdit de passer une liste d'un seul record à executemany. Donc çà pourrait tomber en marche... mais c'est à vous de savoir ce que vous voulez faire...

    - W

  6. #6
    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
    Citation Envoyé par zsoufianz Voir le message
    Est ce que vous pouvez m'expliquer plus. je n'ai pas compris.
    quand je supprime many, je reçois l'erreur: sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
    Dans ce cas, c'est que vos paramètres ne sont pas d'un type Python cohérent avec ceux déclarés côté table.

    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
    >>> conn = sqlite3.connect(':memory:')
    >>> c = conn.cursor()
    >>> c.execute('CREATE TABLE test(nom text, count integer)')
    >>> c.execute('insert into test values(?,?)', (c, 'ab'))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
    >>>>>> c.execute('insert into test values(?,?)', ('ab', c))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    sqlite3.InterfaceError: Error binding parameter 1 - probably unsupported type.
    >>>
    Et l'erreur vous donne l'index du paramètre en défaut.

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

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 139
    Points : 26
    Points
    26
    Par défaut je ne comprend pas. le premier terme c'est Nom et je l'ai déclarer TEXT et je recois Error binding parameter 0
    Citation Envoyé par wiztricks Voir le message
    Dans ce cas, c'est que vos paramètres ne sont pas d'un type Python cohérent avec ceux déclarés côté table.

    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
    >>> conn = sqlite3.connect(':memory:')
    >>> c = conn.cursor()
    >>> c.execute('CREATE TABLE test(nom text, count integer)')
    >>> c.execute('insert into test values(?,?)', (c, 'ab'))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
    >>>>>> c.execute('insert into test values(?,?)', ('ab', c))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    sqlite3.InterfaceError: Error binding parameter 1 - probably unsupported type.
    >>>
    Et l'erreur vous donne l'index du paramètre en défaut.

    - W

  8. #8
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Quand tu écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute('insert into test values(?,?)', (c, 'ab'))
    <c> est alors un curseur de la connexion à sqlite: en tout cas, ce n'est pas du "TEXT" comme attendu.

    Et le message d'erreur dit bien qu'il y a un pb sur le paramètre 0

    Et quand tu recommences:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute('insert into test values(?,?)', ('ab', c))
    il dit bien qu'il y a un pb avec le paramètre 1.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  9. #9
    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
    Citation Envoyé par zsoufianz Voir le message
    je ne comprend pas. le premier terme c'est Nom et je l'ai déclarer TEXT et je recois Error binding parameter 0
    Certes mais... le "Nom" fait défaut est l'objet Python définit (dans votre code) par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           Nom = self.Nom_lineEdit
    Et il faut que ce soit autre chose qu'un type simple car sinon sqlite3 l'accepterait très bien (même si ce n'est pas le type déclaré):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> conn = sqlite3.connect(':memory:')
    >>> c = conn.cursor()
    >>> c.execute('CREATE TABLE test(a text, b float, c integer)')
    <sqlite3.Cursor object at 0x0000000000F09180>
    >>> c.execute('insert into test values(?, ?, ?)', (1, 'cd', 3.4))
    <sqlite3.Cursor object at 0x0000000000F09180>
    >>> conn.commit()
    >>> c.execute('select * from test')
    <sqlite3.Cursor object at 0x0000000000F09180>
    >>> _.fetchall()
    [('1', 'cd', 3.4)]
    >>>
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    Quand tu écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute('insert into test values(?,?)', (c, 'ab'))
    <c> est alors un curseur de la connexion à sqlite: en tout cas, ce n'est pas du "TEXT" comme attendu.

    Et le message d'erreur dit bien qu'il y a un pb sur le paramètre 0

    Et quand tu recommences:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute('insert into test values(?,?)', ('ab', c))
    il dit bien qu'il y a un pb avec le paramètre 1.
    C'est un premier exemple construit pour montrer au PO que sqlite3 pouvait râler lorsqu'on fait vraiment n'importe quoi. Le deuxième exemple illustre que sqlite3 ne râle pas autant qu'on pourrait s'y attendre.

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

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 139
    Points : 26
    Points
    26
    Par défaut je ne trouve pas de solution... si vous voulez me donné la solution ça va être très gentil de votre part
    Citation Envoyé par wiztricks Voir le message
    Certes mais... le "Nom" fait défaut est l'objet Python définit (dans votre code) par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           Nom = self.Nom_lineEdit
    Et il faut que ce soit autre chose qu'un type simple car sinon sqlite3 l'accepterait très bien (même si ce n'est pas le type déclaré):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> conn = sqlite3.connect(':memory:')
    >>> c = conn.cursor()
    >>> c.execute('CREATE TABLE test(a text, b float, c integer)')
    <sqlite3.Cursor object at 0x0000000000F09180>
    >>> c.execute('insert into test values(?, ?, ?)', (1, 'cd', 3.4))
    <sqlite3.Cursor object at 0x0000000000F09180>
    >>> conn.commit()
    >>> c.execute('select * from test')
    <sqlite3.Cursor object at 0x0000000000F09180>
    >>> _.fetchall()
    [('1', 'cd', 3.4)]
    >>>


    C'est un premier exemple construit pour montrer au PO que sqlite3 pouvait râler lorsqu'on fait vraiment n'importe quoi. Le deuxième exemple illustre que sqlite3 ne râle pas autant qu'on pourrait s'y attendre.

    - W

  11. #11
    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
    Citation Envoyé par zsoufianz Voir le message
    je ne trouve pas de solution... si vous voulez me donné la solution ça va être très gentil de votre part
    Il n'y a que vous qui sachiez quel est le type de "self.Nom_lineEdit" que vous avez assigné à "Nom".
    Si vous ne le savez pas, vous pouvez toujours faire print(type(self.Nom_lineEdit)): çà vous dira que ce n'est pas un type simple mais comment à partir de là récupérer le "Nom" qui vous intéresse... çà dépend du code que vous ne montrez pas (et que je ne veux pas voir).

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

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 139
    Points : 26
    Points
    26
    Par défaut
    voila:Nom = self.Nom_lineEdit.text()
    faut ajouter l'attribut .text()
    Merci pour votre aide

  13. #13
    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
    Citation Envoyé par zsoufianz Voir le message
    voila:Nom = self.Nom_lineEdit.text()
    faut ajouter l'attribut .text()
    Merci pour votre aide
    Et il eût été plus simple de demander comment récupérer le texte saisi dans un QLineEdit...

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

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 139
    Points : 26
    Points
    26
    Par défaut oui mais je suis débutant en python c'est pour ca
    Citation Envoyé par wiztricks Voir le message
    Et il eût été plus simple de demander comment récupérer le texte saisi dans un QLineEdit...

    - W

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

Discussions similaires

  1. Python et les variables avec SQLite
    Par Paulove dans le forum Général Python
    Réponses: 4
    Dernier message: 17/03/2012, 01h13
  2. [Glade]Exporter le code en Python avec Glade
    Par Sebmox dans le forum GTK+ avec Python
    Réponses: 2
    Dernier message: 06/08/2006, 00h02
  3. connexion avec sqlite
    Par islem dans le forum SQLite
    Réponses: 1
    Dernier message: 17/07/2006, 12h54
  4. Pb Python avec 'getservbyport()'
    Par tse_tilky_moje_imja dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 26/02/2006, 16h11
  5. Installer Python avec Apache
    Par vincent_nk dans le forum Déploiement/Installation
    Réponses: 8
    Dernier message: 28/01/2006, 18h21

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