2016-12-06 4 views
0

Использование Python 2.7.9, я пытаюсь вынесет открытие и закрытие MySQL соединений и курсорыPython MySQL и менеджеры контекста: __exit__ Атрибут ошибка

Код

class MySQLCursor: 
    def __init__(self, commit=False): 
     self.commit = commit 

    def __enter__(self): 
     self.conn = MySQLdb.connect(host=_MYMYSQLHOST, 
            user=_MYMYSQLUSER, 
            passwd=_MYMYSQLPASSWD, 
            db=_MYMYSQLDB) 
     self.cursor = self.conn.cursor() 
     return self.cursor 

    def __exit__(self, exc_type, exc_val, exc_tb): 
     if self.commit: 
      self.conn.commit() 
     self.cursor.close() 
     self.conn.close() 
     return 

, используя его в

with MySQLCursor as cursor: 
    cursor.execute("SELECT VERSION()") 
    row = cursor.fetchone() 
    print "server version:", row[0] 

Я получаю сообщение об ошибке

AttributeError: __exit__ 

Является ли это проблемой mysql или проблемой менеджера контекста?

+2

try 'with MySQLCursor() как cursor' –

ответ

2

Just do with MySQLCursor() as cursor: - Операторы With требуют экземпляров классов, которые имеют методы __enter__ и __exit__, а не сами классы.

+0

Делает смысл и работает. Благодарю. – 576i