2014-12-15 2 views
0

У меня есть скрипт на python, где я использую MySQLdb-коннектор, но на сервере MySQLdb не установлен, поэтому мне нужен соединитель изменения. У меня есть пример класса:Python mysql: Потерянное соединение с сервером MySQL во время запроса

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 

Можно ли устранить эту ошибку? У меня нет прав доступа к изменениям, и у меня нет доступа к установке MySQLdb на сервере.

+1

Это известная ошибка с COnnector/Python http://bugs.mysql.com/bug.php?id=74483 – Peeyush

ответ

0

Пользователь, которому вы пользуетесь для приложения, не имеет этого разрешения, либо подключитесь к серверу через root, либо войдите в mysql и запустите эту команду ... или предоставите все разрешения пользователю (не рекомендуется для Прикладной уровень пользователей базы данных) с использованием

grant all on database.* to [email protected]'%'; 
flush privileges 
+0

У меня нет доступа root к этому серверу. Это проблема. – krynio

+0

@ krynio..Это что-то связано с разрешением базы данных, и ваш пользователь не имеет этого разрешения. Возможно, вам даже понадобится перезапустить службу базы данных после выполнения команды SET GLOBAL max_allowed_packet = 1073741824 в вашей базе данных. –

+0

Моя проблема не связана с разрешениями. Моя основная проблема заключается в том, что mysql потерял соединение при выполнении запроса. Я пытаюсь изменить размер max_allowed_packet (я нашел его в этом вопросе http://stackoverflow.com/questions/1884859/lost-connection-to-mysql-server-during-query), но у меня нет разрешения на это. – krynio

0

вам не нужно включать глобальный параметр.

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

, пока вы не закроете курсор, то максимально допустимый системной переменной пакет будет значение вы назначите.

Смежные вопросы