我在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。
答案 0 :(得分:0)
您用于该应用程序的用户没有此权限,可以通过root连接到服务器并登录到mysql并运行此命令...或者向用户授予所有权限(不建议用于应用程序)级别数据库用户)使用
grant all on database.* to user@'%';
flush privileges
答案 1 :(得分:0)
您不需要包含全局参数。
cursor = self.db.cursor()
cursor.execute(“SET max_allowed_packet = 1073741824”)
直到您关闭光标,最大允许数据包系统变量将是您指定的值。