Как вы можете безопасно и эффективно получить идентификатор строки после вставки с MySQL, используя MySQLdb в Python? - PullRequest
16 голосов
/ 01 апреля 2009

У меня есть простая таблица в mysql со следующими полями:

  • id - первичный ключ, int, автоинкремент
  • имя - варчар (50)
  • описание - varchar (256)

Используя MySQLdb, модуль python, я хочу вставить имя и описание в таблицу и вернуть идентификатор.

В псевдокоде:

db = MySQLdb.connection(...)
queryString = "INSERT into tablename (name, description) VALUES" % (a_name, a_desc);"

db.execute(queryString);
newID = ???

Ответы [ 4 ]

28 голосов
/ 01 апреля 2009

Я думаю, что это может быть

newID = db.insert_id()

Редактировать с помощью оригинального плаката

Оказывается, в версии MySQLdb, которую я использую (1.2.2) Вы бы сделали следующее:

conn = MySQLdb(host...)

c = conn.cursor()
c.execute("INSERT INTO...")
newID = c.lastrowid

Я оставляю это как правильный ответ, поскольку он указал мне правильное направление.

2 голосов
/ 01 апреля 2009

Я не знаю, есть ли для этого специфичный для MySQLdb API, но в целом вы можете получить последний вставленный идентификатор с помощью ВЫБОР LAST_INSERT_ID ()

Это для каждого соединения, поэтому вы не рискуете состязаниями, если какой-то другой клиент также выполняет вставку.

0 голосов
/ 08 марта 2011

Вы также можете сделать

conn.insert_id

0 голосов
/ 01 апреля 2009

Самый простой способ - это вставить вашу вставку с запросом select count в одну хранимую процедуру и вызвать ее в вашем коде. Вы должны передать параметры, необходимые для хранимой процедуры, а затем выбрать количество строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...