Python MySQLdb - 将光标保持打开是否有好处?

时间:2012-10-16 00:40:36

标签: python mysql mysql-python

[Python / MySQLdb] - CentOS - Linux - VPS

我有一个分析大文件的页面,每次运行最多可查询100次数据。数据库非常大,我正在尝试减少这个脚本的执行时间。

我的SQL函数在一个类中,当前连接对象是在实例化类时创建的类变量。我有各种fetch和query函数,每次调用时都会从连接对象创建一个游标。创建连接对象并重新使用它时创建游标会更快吗?或者每次调用它时创建游标会更好吗?

import MySQLdb as mdb
class parse:
    con = mdb.connect( server, username, password, dbname )
    #cur = con.cursor() ## create here?
    def q( self, q ):
        cur = self.con.cursor() ## it's currently here
        cur.execute( q )

欢迎任何有关如何加速脚本的其他建议。 insert语句对于脚本中的所有查询都是相同的。

1 个答案:

答案 0 :(得分:2)

打开和关闭连接永远不会自由,它总是会浪费一些性能。

你不想让连接保持打开的原因是,如果两个请求同时进入,第二个请求必须等到第一个请求完成才能完成任何工作。< / p>

解决此问题的一种方法是使用连接池。您创建了一堆打开的连接,然后重用它们。每次需要执行查询时,都要检查池中的连接,执行请求,然后将其放回池中。

设置所有这些可能非常繁琐,所以我建议使用SQLAlchemy。它内置connection pooling,开销相对较低,支持MySQL。

由于你关心速度,我只会使用SQLAlchemy的核心部分,因为ORM部分来得有点慢。