MySQLdb и большие запросы с использованием CursorUseResultMixIn


Как я могу использовать CursorUseResultMixIn в MySQLdb. Очевидная вещь, которую нужно было сделать, была:

con=MySQLdb.connect(host='localhost', user='test', passwd='xx', db='yy')
curs = con.cursor(MySQLdb.cursors.CursorUseResultMixIn)

Но это дает мне такую ошибку:

  File "C:Python26libsite-packagesMySQLdbconnections.py", line 226, in cursor
    return (cursorclass or self.cursorclass)(self)
TypeError: object.__new__() takes no parameters

Что я делаю не так?

Соответствующая информация здесь и здесь

1 2

1 ответ:

Модуль MySQLdb.cursors использует CursorUseResultMixIn следующим образом:

class SSCursor(CursorUseResultMixIn, CursorTupleRowsMixIn,
               BaseCursor):

    """This is a Cursor class that returns rows as tuples and stores
    the result set in the server."""

Это буквально все определение SSCursor.

Если у вас нет особой необходимости подклассировать BaseCursor по-другому, вы можете просто использовать SSCursor Вот так:

import MySQLdb.cursors as cursors
con = MySQLdb.connect(host = 'localhost', user = 'test', passwd = 'xx', 
                           db = 'yy', cursorclass = cursors.SSCursor)

ПС. Существует также cursors.SSDictCursor, который возвращает строки в виде словарей, сохраняя результирующий набор на сервере.

PPS. В Ubuntu 11.10 модуль MySQLdb.cursors обычно расположен в /usr/lib/pymodules/python2.7/MySQLdb/cursors.py.