На этом шаге мы рассмотрим конструкции, используемые для обработки результатов запроса.
Для обработки результата запроса применяются следующие методы курсора MySQLdb.cursors.Cursor:
>>> import MySQLdb >>> con = MySQLdb.connect (host="localhost", user="root", charset="utf8", db="python") >>> cur = con.cursor () >>> cur.execute ("SET NAMES utf8") 0 >>> sql = "SELECT `name_city` FROM `city` WHERE `id_city`<3" >>> cur.execute (sql) 2 >>> cur.rowcount # Количество записей 2 >>> con.field_count() # Количество полей 1 >>> cur.fetchone() ('Санкт-Петербург',) >>> cur.fetchone() ('Москва',)
Метод execute () при выполнении запроса SELECT возвращает количество записей в виде длинного целого числа. Получить количество записей можно также с помощью атрибута rowcount объекта-курсора. Узнать количество полей в результате запроса позволяет метод field_count () объекта соединения;
>>> sql = "SELECT `name_city` FROM `city` WHERE `id_city`>2" >>> cur.execute (sql) 5 >>> cur.arraysize 1 >>> cur.fetchmany() (('Новгород',),) >>> cur.fetchmany(2) (('Новый \' " город',), ('Пермь',)) >>> cur.fetchmany(3) (('Самара',), ('Омск',)) >>> cur.fetchmany() ()
>>> sql = "SELECT `name_city` FROM `city` WHERE `id_city`>4" >>> cur.execute (sql) 3 >>> cur.fetchall() (('Пермь',), ('Самара',), ('Омск',)) >>> cur.fetchall() ()
Объект-курсор поддерживает итерационный протокол, поэтому можно перебрать записи с помощью цикла for, указав объект-курсор в качестве параметра:
>>> sql = "SELECT `name_city` FROM `city` WHERE `id_city`>4" >>> cur.execute (sql) 3 >>> for row in cur: print (row[0]) Пермь Самара Омск
Все рассмотренные методы после возвращения результата перемещают указатель текущей позиции. Если необходимо вернуться в начало или переместить указатель к произвольной записи, следует воспользоваться методом scroll(<Смещение>, <Точка отсчета>). Во втором параметре могут быть указаны значения:
Если указанное смещение выходит за диапазон, возбуждается исключение IndexError. Для примера переместим указатель в начало, выведем все записи, а затем вернемся на одну запись назад:
>>> cur.scroll (0, "absolute") >>> res = cur.fetchall () >>> for name in res: print (name[0]) Пермь Самара Омск >>> cur.scroll (-1, "relative") >>> res = cur.fetchall () >>> for name in res: print (name[0]) Омск
Все рассмотренные методы возвращают запись в виде кортежа. Если необходимо изменить такое поведение и получить записи в виде словаря, то следует воспользоваться курсором MySQLdb.cursors.DictCursor. Этот курсор аналогичен курсору MySQLdb.cursors.Cursor, но возвращает записи в виде словаря, а не кортежа. Для примера выведем запись с идентификатором 5 в виде словаря:
>>> con = MySQLdb.connect (host="localhost", user="root", charset="utf8", db="python") >>> cur = con.cursor (MySQLdb.cursors.DictCursor) >>> sql = "SELECT * FROM `city` WHERE `id_city`=5" >>> cur.execute (sql) 1 >>> cur.fetchone() {'name_city': 'Пермь', 'id_city': 5}
Со следующего шага мы начнем рассматривать библиотеку PyODBC.