[Python/MySQLdb] - CentOS - Linux - VPS
我有一个页面可以解析一个大文件并每次运行查询数据最多 100 次。数据库非常大,我正在尝试减少该脚本的执行时间。
My SQL 函数位于类内部,当前连接对象是实例化类时创建的类变量。我有各种获取和查询函数,每次调用它们时都会从连接对象创建游标。在创建连接对象时创建游标并重用它会更快吗?或者每次调用时创建游标会是更好的做法吗?
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 )
也欢迎任何有关如何加快脚本速度的其他建议。对于脚本中的所有查询,插入语句都是相同的。
最佳答案
打开和关闭连接从来都不是免费的,它总是会浪费一些性能。
您不想让连接保持打开状态的原因是,如果同时传入两个请求,则第二个请求必须等到第一个请求完成后才能执行任何工作。
解决此问题的一种方法是使用连接池。您创建一堆打开的连接,然后重用它们。每次需要执行查询时,您都会从池中检查连接,执行请求,然后将其放回池中。
设置所有这些可能非常乏味,所以我建议使用 SQLAlchemy 。它内置于 connection pooling ,开销相对较低,并且支持MySQL。
既然你关心速度,我只会使用 SQLAlchemy 的核心部分,因为 ORM 部分有点慢。
关于Python MySQLdb - 让游标保持打开状态有好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905986/