何时关闭MySQLdb中的游标?

时间:2015-10-23 17:21:12

标签: python mysql-python

我有一个运行循环的程序,每次迭代运行一个sql查询。我目前已将其实施为。

mysql_connection = MySQLdb.connect(...)
for record in records:
  cursor = mysql_connection.cursor()
  curson.execute(some_query)
  result = None
  for r in cursor:
       result = r
  cursor.close()
  #Do something with result
mysql_connection.close()

每次循环运行时都会占用大量时间,因此会创建一个新光标。将光标置于循环外部是一种更好的方法,或者我可以使用其他东西来提高性能。

我已经在索引列上进行了搜索查询,因此mysql端的改进范围较小。

2 个答案:

答案 0 :(得分:1)

最好一次创建游标。另外请注意您在周期中执行return,因此您似乎只拨打cursor.execute一次。

答案 1 :(得分:0)

尝试将c.arraysize设置为对您的用例有意义的值(其中c是光标),并将光标粘贴在循环之外。查看此页面:http://mysql-python.sourceforge.net/MySQLdb.html#cursor-objects

  

如果您想要更多行,可以使用c.fetchmany(n)或c.fetchall()。这些完全符合您的想法。在c.fetchmany(n)上,n是可选的,默认为c.arraysize,通常为1.这两个方法都返回一个行序列,如果没有更多行,则返回一个空序列。如果使用奇怪的游标类,则行本身可能不是元组。