我正在尝试运行一些需要创建一些临时表然后返回结果集的查询,但我无法使用 MySQLdb api 做到这一点。
我已经像这里一样对这个问题进行了挖掘,但没有成功。
我的查询是这样的:
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
我可以看到我的查询正在执行。他们需要几分钟才能完成。为什么游标立即返回并且不等待查询运行。
如果我尝试运行另一个查询,则会出现“命令不同步;您现在无法运行此命令”
我已经尝试将我与自动提交的连接设置为 True
db = MySQLdb.connect(host='ip',
user='root',
passwd='pass',
db='mydb',
use_unicode=True
)
db.autocommit(True)
或者把每一个陈述都放在他们自己cursor.execute()
和他们之间,db.commit()
但也没有成功。
你能帮我弄清楚是什么问题吗?我知道 mysql 不支持某些操作(如 alter table)的事务,但为什么 api 不像使用 a 那样等到一切都完成select
?
顺便说一句,我正在尝试在 ipython 笔记本上执行此操作。