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

Réseau/Web Python Discussion :

Python/SQL problème incrementation/TypeError


Sujet :

Réseau/Web Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    R
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : R

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Python/SQL problème incrementation/TypeError
    Bonjour/bonsoir,

    J'ai un problème comme l'indique le titre, entre une opération d'incrémentation à partir d'un fichier python vers un base de données (SQLite3),

    J'ai créer un dbase avec une table de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE `table_scores` (
    	`user`	TEXT NOT NULL,
    	`score`	INTEGER,
    	`id`	INTEGER NOT NULL, #Avec ou sans NOT NULL même problème.
    	PRIMARY KEY(`id`)
    );
    Tout ce passe bien sauf pour incrémenter la colonne ID, mon script :

    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
     
    #variables
     
    path_db_user = '/db/'
    conn = sqlite3.connect('db/user_db')
    db_ram = sqlite3.connect(':memory:')
    c = conn.cursor()
    last_id = c.lastrowid
    id = 5
    user = 'jean'
    score = 500
     
    def insert_data():
    	c.execute("INSERT INTO table_scores VALUES (?,?,?);", ( user, score,(c.lastrowid + 1))) # ICI (pareil avec la variable last_id)
    	conn.commit()
    	c.close()
    	conn.close()
    insert_data()
    Quand je lance, cela me met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      File "pendu.py", line 19, in insert_data
        c.execute("INSERT INTO table_scores VALUES (?,?,?);", ( user, score, (c.lastrowid + 1)))
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
    Je sais pas lequel des deux valeurs entre c.lastrowid + 1 et ID déconne. (J'ai déjà des valeurs d'enregistrer dans la colonne ID).
    Si quelqu'un à la solution ou une autre solution, je suis preneur, merci d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 239
    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 239
    Points : 36 692
    Points
    36 692
    Par défaut
    Citation Envoyé par Colibr1 Voir le message
    Je sais pas lequel des deux valeurs entre c.lastrowid + 1 et ID déconne. (J'ai déjà des valeurs d'enregistrer dans la colonne ID).
    La commande "print" devrait vous permettre de le savoir, non?

    Pour le reste, il faut quand même lire la documentation: çà dit que lastrowid n'est mis à jour qu'après un INSERT et celle de sqlite qui vous explique qu'avoir un identifiant auto-incrémenté pour ses records est une fonctionnalité de base: autant l'utiliser...

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

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    R
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : R

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    La commande "print" devrait vous permettre de le savoir, non?

    Pour le reste, il faut quand même lire la documentation: çà dit que lastrowid n'est mis à jour qu'après un INSERT et celle de sqlite qui vous explique qu'avoir un identifiant auto-incrémenté pour ses records est une fonctionnalité de base: autant l'utiliser...

    - W
    Merci de ta réponse ca m'a aider, au lieu de faire :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute("INSERT INTO table_scores VALUES (?,?,?);", ( user, score,(c.lastrowid + 1)))
    j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute("INSERT INTO table_scores (user, score) VALUES (?,?);", (user, score))
    Pour ce qui ne l'aurait pas compris, je choisi uniquement d'entrer user et score juste après le nom de la table et pour ID, il s'incrémente tout seul maintenant car sur SQLite3, la primary_key n'a pas besoin d'être sur auto_increment pour s'incrémenter. (Si j'ai bien compris)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 239
    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 239
    Points : 36 692
    Points
    36 692
    Par défaut
    Citation Envoyé par Colibr1 Voir le message
    il s'incrémente tout seul maintenant car sur SQLite3, la primary_key n'a pas besoin d'être sur auto_increment pour s'incrémenter. (Si j'ai bien compris)
    La documentation raconte que, par défaut, sqlite3 maintient déjà une colonne ROWID qui s'auto-incrémente... et que si vous créez une clef primaire de type integer, ce sera juste un alias de ce ROWID.

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

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    R
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : R

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    La documentation raconte que, par défaut, sqlite3 maintient déjà une colonne ROWID qui s'auto-incrémente... et que si vous créez une clef primaire de type integer, ce sera juste un alias de ce ROWID.

    - W
    Oui exact, mais il est nécessaire de l'afficher pour qu'elle soit activé ou elle est automatiquement mise ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 239
    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 239
    Points : 36 692
    Points
    36 692
    Par défaut
    Citation Envoyé par Colibr1 Voir le message
    Oui exact, mais il est nécessaire de l'afficher pour qu'elle soit activé ou elle est automatiquement mise ?
    C'est automatique, sauf qu'elle n'est pas dans le schema de la table... donc "SELECT * FROM...." ne la retournera pas. C'est ce qui peut donner un intérêt à l'alias.

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

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    R
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : R

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est automatique, sauf qu'elle n'est pas dans le schema de la table... donc "SELECT * FROM...." ne la retournera pas. C'est ce qui peut donner un intérêt à l'alias.

    - W
    D'accord, merci de vos réponses.
    Bonne continuation.

Discussions similaires

  1. Python - SQL problème d'encodage
    Par cocs78 dans le forum Général Python
    Réponses: 6
    Dernier message: 21/02/2017, 12h10
  2. [SQL] problème pour faire ma requete
    Par seb.briet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/12/2004, 17h51
  3. [PL/SQL] problème de trigger
    Par Chuck67 dans le forum Oracle
    Réponses: 14
    Dernier message: 10/12/2004, 00h17
  4. [SQL] problème avec les date et les group By
    Par Stef784ever dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2004, 10h18
  5. [Debutant][Join Sql] problème de join
    Par ultimax dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/11/2004, 13h01

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