Last row id +1
Résolu/Fermé
kanon22
-
Modifié le 15 déc. 2021 à 14:11
mamiemando Messages postés 33381 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 26 novembre 2024 - 15 déc. 2021 à 14:17
mamiemando Messages postés 33381 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 26 novembre 2024 - 15 déc. 2021 à 14:17
7 réponses
jee pee
Messages postés
40475
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
26 novembre 2024
9 428
Modifié le 12 déc. 2021 à 18:37
Modifié le 12 déc. 2021 à 18:37
Bonjour,
Je ne suis pas utilisateur de mysql, donc mes remarques ne sont que des pistes.
Vous ne nous avez pas donné le message d'erreur qui est rendu à l'exécution.
Vous récupérez lastid mais il n'y a pas le +1
Dans un SGBD le rowid n'est pas nécessairement un simple numéro d'ordre, mais dans mysql ??? Et si le rowid est un nombre simple, compteur des lignes, une suppression pourrait tout faire échouer, 3 enregistrements, 1,2,3 rowid=3, suppression du 2, rowid=2, insertion 2+1 ==> duplicate id.
Pour récupérer le dernier id utilisé on pourrait faire un select max(id) from table.
Et souvent, si l'id n'est pas significatif on se s'embête pas à le gérer, on définit une table avec un champ automatique auto incrémenté.
Je ne suis pas utilisateur de mysql, donc mes remarques ne sont que des pistes.
Vous ne nous avez pas donné le message d'erreur qui est rendu à l'exécution.
Vous récupérez lastid mais il n'y a pas le +1
Dans un SGBD le rowid n'est pas nécessairement un simple numéro d'ordre, mais dans mysql ??? Et si le rowid est un nombre simple, compteur des lignes, une suppression pourrait tout faire échouer, 3 enregistrements, 1,2,3 rowid=3, suppression du 2, rowid=2, insertion 2+1 ==> duplicate id.
Pour récupérer le dernier id utilisé on pourrait faire un select max(id) from table.
Et souvent, si l'id n'est pas significatif on se s'embête pas à le gérer, on définit une table avec un champ automatique auto incrémenté.
salut, merci de ta réponse.
le message qui apparait est : "1048 (23000): Column 'id' cannot be null"
mais pour l'auto incrémentation, j'ai croisé des tutos sur ça sans trop y faire attention, du coup, je vais faire des recherches pour ça.
donc merci bcpppp. je reviendrai dès que je trouve une solution ;)
le message qui apparait est : "1048 (23000): Column 'id' cannot be null"
mais pour l'auto incrémentation, j'ai croisé des tutos sur ça sans trop y faire attention, du coup, je vais faire des recherches pour ça.
donc merci bcpppp. je reviendrai dès que je trouve une solution ;)
jee pee
Messages postés
40475
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
26 novembre 2024
9 428
12 déc. 2021 à 20:52
12 déc. 2021 à 20:52
"Column 'id' cannot be null" clairement ton lastid n'est pas initialisé
et quand on recherche .lastrowid on voit que cette propriété n'est initialisée qu'après un insert ou update. Or toi tu n'as encore rien fait comme action : https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-lastrowid.html
et surtout c'est utilisé pour après une insertion renvoyer l'id généré sur un champ auto_increment, c'est donc bien autour de cette notion qu'il faut chercher
et quand on recherche .lastrowid on voit que cette propriété n'est initialisée qu'après un insert ou update. Or toi tu n'as encore rien fait comme action : https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-lastrowid.html
et surtout c'est utilisé pour après une insertion renvoyer l'id généré sur un champ auto_increment, c'est donc bien autour de cette notion qu'il faut chercher
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ça marche !
D'abord, il faut changer l'ID dans mysql en
Puis au niveau du code :
Donc merci encore une fois :D
D'abord, il faut changer l'ID dans mysql en
auto incrementet pour cela il faut cliquer sur "IA", sinon
auto increment" reste verrouillé.
Puis au niveau du code :
sql = "INSERT INTO users (id,username,password,numero) VALUES (%s, %s, %s, %s)" val = (0, username, password, numero) mycursor.execute(sql, val) mysqldb.commit() lastid = mycursor.lastrowid e1.delete(0, END) e1.insert(END, lastid)
Donc merci encore une fois :D
jee pee
Messages postés
40475
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
26 novembre 2024
9 428
14 déc. 2021 à 16:55
14 déc. 2021 à 16:55
Bravo ! c'est comme cela qu'il faut travailler, tester, faire des recherches sur les instructions que l'on utilise, poser des questions quand on bloque.
Juste une observation, vérifier si c'est comme cela que ça fonctionne dans Mysql. A mon avis, dans l'insert on n'a pas besoin de préciser le champ id et sa valeur 0, on peut s'en passer le champ étant auto généré. Cela allège le code.
Juste une observation, vérifier si c'est comme cela que ça fonctionne dans Mysql. A mon avis, dans l'insert on n'a pas besoin de préciser le champ id et sa valeur 0, on peut s'en passer le champ étant auto généré. Cela allège le code.
mamiemando
Messages postés
33381
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 novembre 2024
7 802
15 déc. 2021 à 14:17
15 déc. 2021 à 14:17
Bonjour,
Quelques petites clarifications, qui confirme ce que suspecte jee pee :
Exemple :
Bonne chance
Quelques petites clarifications, qui confirme ce que suspecte jee pee :
- En MySQL il existe une fonction pour auto incrémenter l'identifiant. Ce n'est pas le cas de tous les SGBD, mais comme MySQL le permet, autant en profiter.
- Cela se spécifie au moment de créer la table (ou en altérant la table). Si la table est créée via du code, cela se précise dans l'instruction
CREATE TABLE ...
. Si la table existe déjà, on peut activer se comportement via un client MySQL. - Quand l'auto incrément est activé, il n'est pas utile de spécifier l'ID au moment d'insérer le tuple dans la table, MySQL se débrouille.
Exemple :
CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES ('dog'),('cat'),('penguin'), ('lax'),('whale'),('ostrich'); SELECT * FROM animals;
Bonne chance