Возможно ли выкупить все последние строки после выполнения какой-либо вставки в mysqldb?
Я не могу быть уверен, будет ли генерируемые идентификаторы непрерывными, если нет, есть ли другие пути для их получения?
class BaseDao(object):
def __init__(self,pooldb):
self.pooldb = pooldb
def insertmany(self,sql,args):
conn,cur = None,None
try:
conn = pooldb.dedicated_connection()
cur = conn.cursor()
num=cur.executemany(sql,args)
if num <= 0:
raise Exception("insert failure with num equals zero")
lastrowid = int(cur.lastrowid)
return [range(lastrowid - num + 1,lastrowid+1)]
except:
conn.rollback()
traceback.print_exc()
raise Exception("error happened when insert sql=%s args=%s " % (sql,str(args)))
finally:
if cur:
cur.close()
if conn:
conn.close()
Ответы
Ответ 1
Каждый раз, когда mysqldb выполняет запрос с использованием столбца auto-increment, последний идентификатор вставки будет потерян, если вы не прочитаете его до следующего execute(), который с помощью функции execute() вы не сможете сделать.
Вам нужно будет изменить код выше:
num = 0
insert_ids = []
for arg in args:
num += cur.execute(sql, arg)
insert_ids.append(cur.lastrowid)
Поскольку модуль Python действительно является тонким слоем над API MySQL, вот некоторые сведения о том, как работает функция mysql_insert_id().