Я выполняю сценарий SQL на Python, который выглядит примерно так:
1 INSERT INTO my_table VALUES (1, 2, 3);
2 SET @var_1 = LAST_INSERT_ID();
3 INSERT INTO my_table VALUES (4, 5, 6);
4 SET @var_2 = LAST_INSERT_ID();
5 INSERT INTO my_table VALUES (7, 8, 9);
6 SET @var_3 = LAST_INSERT_ID();
7 SELECT @var_1, @var_2, @var_3;
Как видите, только последний оператор возвращает что-либо.
Однако в Python длячтобы получить результат из этого последнего утверждения, я должен перебрать все остальные операторы :
cursor : MySQLdb.cursors.Cursor
for _ in range( num_statements - 1 ):
cursor.nextset()
result = cursor.fetchone()
Для моего примера из 7 операторов это не проблема,однако для запроса на 100 000 операторов этот простой итерационный процесс выполняется в 10 раз дольше, чем для выполнения самого запроса!
Есть ли способ заставить курсор просто перейти к результату финального запроса?Скажите, или я что-то не так делаю?