Как вы безопасно и эффективно получаете идентификатор строки после вставки с mysql, используя MySQLdb в python?

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

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

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

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

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

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

Ответ 1

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

newID = db.insert_id()

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

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

conn = MySQLdb(host...)

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

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

Ответ 2

Я не знаю, есть ли для этого API-интерфейс MySQLdb, но в целом вы можете получить последний вставленный id SELECTing LAST_INSERT_ID()

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

Ответ 3

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

conn.insert_id

Ответ 4

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