Как вы безопасно и эффективно получаете идентификатор строки после вставки с 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
Самый простой способ - обернуть вашу вставку с помощью запроса подсчета выборок в одну хранимую процедуру и вызвать ее в вашем коде. Вы должны передать параметры, необходимые для хранимой процедуры, и затем выберете количество строк.