Python MySQLdb - 让游标保持打开状态有好处吗?

标签 python mysql mysql-python

[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/

相关文章:

mysql - 如何从两个不同的表中获取两个不同的列值 invert 一个值表依赖于另一个表值

mysql - MySQL 数据库中的文件处理?

mysql - 从表中对每种类型进行高效 SELECT

python - 根据共存规则将列表拆分为多个组

python - Matplotlib 直方图 bins 选择取决于数据是绘制 "alone"还是与其他一些数据 : how so?

python - 如何从 Python 脚本创建 .pyc 文件

python - Tensorflow - keras - 'strided_slice' 的形状错误(使用调整大小的 MNIST 数据集)

python 用 "on duplicate key update"执行很多?

CentOS 上的 Django

Python mysqldb : Library not loaded: libmysqlclient. 18.dylib