Comment faites-vous en toute sécurité et efficacement obtenir l'id de ligne après un insert avec mysql à l'aide de MySQLdb en python?
J'ai une simple table dans mysql avec les champs suivants:
- id -- Primary key, int, autoincrement
- nom varchar(50)
- description -- varchar(256)
À l'aide de MySQLdb, un module python, je veux insérer un nom et une description dans la table, et de récupérer l'id.
En pseudo-code:
db = MySQLdb.connection(...)
queryString = "INSERT into tablename (name, description) VALUES" % (a_name, a_desc);"
db.execute(queryString);
newID = ???
Double de Comment puis-je obtenir de l'IDENTITÉ / la numérotation automatique de la valeur pour la ligne je l'ai inséré dans pymysql, qui est une meilleure Q&Une paire; celui-ci a une mauvaise réponse acceptée avec la bonne réponse, édité en dessous, ce qui est étrange et inutile.
OriginalL'auteur grieve | 2009-04-01
Vous devez vous connecter pour publier un commentaire.
Je pense qu'il pourrait être
Édition par Affiche Originale
S'avère, dans la version de MySQLdb que j'utilise (1.2.2)
Vous effectuez les opérations suivantes:
Je laisse ce que la bonne réponse, car il m'a pointé dans la bonne direction.
Je sais que ce commentaire est super vieux, mais vous souvenez-vous pourquoi il convient avant de l'engager?
J'imagine, parce que le code est fait avec le curseur, et perdra contexte après la validation. Réponses courtes, c'était mieux pour moi de cette façon.
OriginalL'auteur David Z
Je ne sais pas si il y a un MySQLdb API spécifique pour cela, mais en général vous pouvez obtenir le dernier id inséré par La sélection LAST_INSERT_ID()
C'est sur une base de connexion, de sorte que vous ne risquez pas de conditions de course si un autre client effectue une requête insert.
OriginalL'auteur Stefano Borini
Vous pouvez également faire une
conn.insert_id
OriginalL'auteur Abdul Bijur V A
La façon la plus simple de tous est d'envelopper votre insert avec un select count requête dans une seule procédure stockée et l'appeler dans votre code. Vous voulez passer dans les paramètres nécessaires à la procédure stockée et il serait alors sélectionnez votre nombre de lignes.
-1 pour la préfixation de tous "de la manière la plus simple"
-1 pour le dessus et le fait que vous avez raté le bateau.
OriginalL'auteur TheTXI