Результаты запроса команды SQL select

rezultaty zaprosa komandy sql select Базы данных и постоянное хранение

Возвращаются в сценарии в виде последовательностей, содержащих последовательности (например, списков кортежей), представляющих таблицы записей баз данных. Внутри этих последовательностей записей значения полей являются обычными объектами Python, такими как строки, целые и вещественные числа (например, [(‘bob’,48), (’emily’,47)]). Значения полей могут также быть объектами специального типа, хранящими такие значения, как дата и время, а значения NULL в базе данных возвращаются в виде объекта None.

Помимо этого API определяет стандартный набор типов исключений баз данных, конструкторы специальных типов баз данных и информационные вызовы верхнего уровня, поддерживающие многопоточную модель выполнения и проверку используемых символов замены в параметризованных запросах.

Например, чтобы установить соединение с базой данных через интерфейс для Oracle, совместимый с Python, необходимо установить расширение Python для поддержки Oracle, а затем выполнить инструкцию такого вида:

connobj = connect("user/password@system")

Содержимое строкового аргумента зависит от базы данных и производителя (например, в некоторых случаях может потребоваться указать дополнительную сетевую информацию или имя локального файла), но обычно это данные, с помощью которых производится регистрация в системе базы данных. Получив объект соединения, над ним можно выполнять различные операции, в том числе:

connobj.close() закрыть соединение сейчас

(не в момент вызова __del__ объекта) connobj.commit() подтвердить текущие транзакции в базе данных connobj.rollback() откатить базу данных в начало текущих транзакций

Одно из наиболее полезных действий с объектом соединения заключается в создании объекта курсора:

cursobj = connobj.cursor() возвратить новый объект курсора для выполнения команд SQL

Объекты курсоров обладают множеством методов (например, метод close позволяет закрыть курсор раньше, чем будет выполнен его деструктор, а метод callproc вызывает хранимую процедуру), но самым важным, пожалуй, является следующий:

cursobj.execute(sqlstring [, parmeters]) выполнить запрос SQL или команду

Параметры parameters передаются в виде последовательности или отображения значений и подставляются в строку sqlstring с инструкцией SQL в соответствии с соглашениями о замене, действующими в модуле реализации интерфейса. С помощью метода execute можно выполнять различные инструкции SQL:

     инструкции определения данных DDL (например, CREATE TABLE)

     инструкции модификации данных DML (например, UPDATE или INSERT)

     инструкции запросов DQL (например, SELECT)

После выполнения инструкции SQL атрибут rowcount курсора содержит количество изменившихся (для инструкций DML) или извлеченных (для запросов DQL) строк, а атрибут description курсора содержит имена столбцов и их типы. Кроме того, в интерфейсах большинства поставщиков метод execute возвращает количество измененных или извлеченных строк. Для завершения выполнения запроса DQL необходимо вызвать один из следующих методов fetch:

tuple = cursobj.fetchone() получить следующую строку

из результата запроса

listoftuple = cursobj.fetchmany([size]) получить следующую группу строк из результата

listoftuple = cursobj.fetchall() получить все оставшиеся строки

из результата

После получения результатов с помощью метода fetch данные таблицы обрабатываются с помощью обычных операций последовательностей Python — например, можно обойти кортежи в списке результатов, полученном вызовом метода fetchall с помощью простого цикла for или выражения-генератора. Большинство интерфейсов баз данных Python позволяет также указывать значения, которые должны быть переданы в инструкции SQL, определяя символы подстановки и кортеж параметров. Например:

query = ‘SELECT name, shoesize FROM spam WHERE job = ? AND age = ?’ cursobj.execute(query, (value1, value2)) results = cursobj.fetchall() for row in results:

В данном случае интерфейс базы данных использует параметризованные инструкции (для оптимизации и удобства) и корректно передает параметры в базу данных независимо от их типов в языке Python. Обозначения параметров в интерфейсах некоторых баз данных могут быть иными (например, в интерфейсе для Oracle используются обозначения :p1 и :p2 или два %s вместо двух ?). Во всяком случае, это не то же самое, что оператор Python форматирования строки %, а кроме того, применение параметров в запросах помогает обойти некоторые проблемы, связанные с безопасностью.

Наконец, если база данных поддерживает хранимые процедуры, их можно вызывать их с помощью метода callproc или передавая методу execute строку команды SQL CALL или EXEC. Метод callproc может генерировать таблицу с результатами, получить которую можно с помощью одного из методов fetch, и возвращает модифицированную копию входной последовательности — входные параметры остаются нетронутыми, а выходные и входные/выходные параметры замещаются новыми значениями. Описание дополнительных особенностей API, включая поддержку больших блоков двоичных данных, можно найти в документации API. А теперь рассмотрим, как реализовать работу с инструкциями SQL на языке Python.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий