【问题标题】:Python MySQLdb - Is there a benefit to leaving the cursor open?Python MySQLdb - 保持光标打开有什么好处吗?
【发布时间】:2012-10-06 00:55:36
【问题描述】:

[Python/MySQLdb] - CentOS - Linux - VPS

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

我的 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 )

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

【问题讨论】:

    标签: python mysql mysql-python


    【解决方案1】:

    打开和关闭连接从来都不是免费的,它总是会浪费一些性能。

    您不想让连接保持打开状态的原因是,如果两个请求同时进入,第二个请求必须等到第一个请求完成后才能执行任何工作。

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

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

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

    【讨论】:

    • 非常感谢,但是光标呢?当您说连接时,您是指光标还是在谈论连接对象?
    • 我说的是连接对象。创建新连接比创建新游标要昂贵得多。
    • 在示例中,我为文件打开了一个连接。你是否建议我改变它,听起来我不应该。
    • 还有一个问题是,让一个光标打开比创建数百个更好吗?
    • @NathanVillaescusa 你没有回答亚当的问题。坦率地说,我不知道为什么它被接受了。
    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2020-10-29
    • 2011-04-24
    • 1970-01-01
    相关资源
    最近更新 更多