Я пытаюсь выполнить некоторые запросы, которые должны создать некоторые временные таблицы, а затем вернуть набор результатов, но я не могу сделать это с API MySQLdb.
Я уже копал что-то об этой проблеме, например здесь, но безуспешно.
Мой запрос выглядит так:
create temporary table tmp1
select * from table1;
alter tmp1 add index(somefield);
create temporary table tmp2
select * from table2;
select * from tmp1 inner join tmp2 using(somefield);
Это немедленно возвращает пустой набор результатов. Если я зайду в клиент mysql и сделаю show full processlist
, я увижу выполнение моих запросов. Их выполнение занимает несколько минут. Почему курсор возвращается немедленно и не ждет выполнения запроса.
Если я попытаюсь выполнить другой запрос, у меня появится сообщение «Команды не синхронизированы, вы не можете запустить эту команду сейчас».
Я уже пытался поставить свое соединение с autocommit на True
db = MySQLdb.connect(host='ip',
user='root',
passwd='pass',
db='mydb',
use_unicode=True
)
db.autocommit(True)
Или поместить каждое утверждение в собственное cursor.execute()
и между ними db.commit()
, но тоже безуспешно.
Можете ли вы помочь мне понять, в чем проблема? Я знаю, что mysql не поддерживает транзакции для некоторых операций, таких как изменение таблицы, но почему API не ждет, пока все не будет завершено, как это происходит с select
?
Кстати, я пытаюсь сделать это на ноутбуке ipython.
db.commit()
, я получаю ошибку синхронизации. - person balsagoth   schedule 13.11.2013