Python mysql:在查询期间丢失与MySQL服务器的连接

时间:2014-12-15 14:20:27

标签: python mysql

我在python中使用MySQLdb连接器的脚本,但是在服务器MySQLdb上没有安装,所以我需要更改连接器。我有示例类:

class Foo:

    def __init__(self, config):
        self.logger = logging.getLogger("Foo")
        self.db = MySQLdb.connect(host=config["host"],user=config["user"], passwd=config["passwd"], db=config["db"])

    def get_something(self):
        cursor=self.db.cursor()
        cursor.execute("Select ...")
        for row in cursor:
            self.logger.debug(row)
            yield(row)

f = Foo(config)
f.get_something()

当我使用MySQLdb连接器时,它可以工作。在这种情况下,python读取所有记录并存储在内存中。 但是,当我将连接器更改为mysql.connector时,脚本会打印一些记录并引发错误:

mysql.connector.errors.InterfaceError: 2013: Lost connection to MySQL server during query

这是修改过的课程:

class Foo:

    def __init__(self, config):
        self.logger = logging.getLogger("Foo")
        self.db = mysql.connector.connect(host=config["host"],user=config["user"], passwd=config["passwd"], db=config["db"])

    def get_something(self):
        cursor=self.db.cursor()
        cursor.execute("Select ...")
        for row in cursor:
            self.logger.debug(row)
            yield(row)

f = Foo(config)
f.get_something()

我尝试运行查询:

self.db.cursor().execute("SET GLOBAL max_allowed_packet=1073741824")

但我有错误:

mysql.connector.errors.ProgrammingError: 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation

是否可以修复此错误?我没有root权限来访问更改权限,我无法访问在服务器上安装MySQLdb。

2 个答案:

答案 0 :(得分:0)

您用于该应用程序的用户没有此权限,可以通过root连接到服务器并登录到mysql并运行此命令...或者向用户授予所有权限(不建议用于应用程序)级别数据库用户)使用

grant all on database.* to user@'%';
flush privileges

答案 1 :(得分:0)

您不需要包含全局参数。

  

cursor = self.db.cursor()
  cursor.execute(“SET max_allowed_pa​​cket = 1073741824”)

直到您关闭光标,最大允许数据包系统变量将是您指定的值。