在同一语句中执行django查询

时间:2013-06-17 13:33:05

标签: python database django connection

这可能是一个愚蠢的问题。有没有办法在一个execute语句中执行多个查询?

cursor = conn.cursor()
cursor.execute("Select * from my_tables; show tables;")
result = cursor.fetchall()

1 个答案:

答案 0 :(得分:1)

默认情况下CLIENT_MULTI_STATEMENTS看起来CLIENT_MULTI_RESULTSMySQLdb选项已启用(这非常令人不安),所以你可以这样做......

>>> import MySQLdb
>>> conn = MySQLdb.connect(db='test')
>>> cur = conn.cursor()
>>> cur.execute('select * from foo; show tables;')
2L
>>> cur.fetchall()
((1L,), (1L,))
>>> cur.nextset()
1
>>> cur.fetchall()
(('foo',),)

如果您想演示一个对InnoDB表进行更改的示例,您必须使用类似的东西提交事务...

>>> cur.execute('select * from foo; insert into foo values (123);')
2L
>>> cur.nextset()
1
>>> conn.commit()
>>> cur.execute('select * from foo')
3L
>>> cur.fetchall()
((1L,), (1L,), (123L,))

查看PEP249了解所有返回值的含义。