Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为每个查询打开一个新的MySQL游标是否很慢?_Python_Mysql - Fatal编程技术网

Python 为每个查询打开一个新的MySQL游标是否很慢?

Python 为每个查询打开一个新的MySQL游标是否很慢?,python,mysql,Python,Mysql,我在这里看到了一些答案,在每个查询之前打开一个新的MySQL游标,然后关闭它 那么慢吗?我不应该通过将光标作为参数传入来循环使用它吗 我有一个执行无限循环的程序,因此最终连接将在默认的8小时后超时 编辑: 根据要求,这是处理SQL查询的相关代码: def fetch_data(query): try: cursor = db.Cursor() cursor.execute(query) return cursor.fetchall()

我在这里看到了一些答案,在每个查询之前打开一个新的MySQL游标,然后关闭它

那么慢吗?我不应该通过将光标作为参数传入来循环使用它吗

我有一个执行无限循环的程序,因此最终连接将在默认的8小时后超时

编辑:

根据要求,这是处理SQL查询的相关代码:

def fetch_data(query):
    try:
        cursor = db.Cursor()
        cursor.execute(query)
        return cursor.fetchall()
    except OperationalError as e:
        db = fetchDb()
        db.autocommit(True)
        print 'reconnecting and trying again...'
        return fetch_data(query)

当然,将一个连接重新连接数千次将花费更多的时间。最好将其设置为类的属性,如下所示:

class yourClass():
    self.db = ...
    self.cursor = self.con.Cursor()

    # do something
    def fetch_data(self, query):
        try:
            if self.cursor:
                self.cursor.execute(query)
            else:
                raise OperationalError
            return self.cursor.fetchall()
        except OperationalError as e:
            self.db = fetchDb()
            self.db.autocommit(True)
            print 'reconnecting and trying again...'
            return fetch_data(query)    

您应该通过分析将当前功能识别为瓶颈。还有一个问题似乎与您自己的问题类似:@hd1谁说基本功能没有完成?完成了,我正在修复在前10k-20k迭代后出现的一个bug,它依赖于这个问题。请发布您的代码@macdonjo。。。我来看看我加的。不确定它是否有用。为什么要拙劣地重新发明SQLAlchemy?