我有一个运行循环的程序,每次迭代运行一个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端的改进范围较小。
答案 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.这两个方法都返回一个行序列,如果没有更多行,则返回一个空序列。如果使用奇怪的游标类,则行本身可能不是元组。