Платформы корпоративных информационных систем

         

Запросы



Запросы

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

mSQL API и простая форма MySQL API позволяют приложению запрашивать базу данных и выводить результаты в виде списка. К несчастью, эти API имеют тривиальное, но неприятное различие в том, каким образом это делается. Во-первых, для mSQL метод запроса называется query(), а для MySQL он называется do(). Каждый из методов воспринимает в качестве аргумента любую строку SQL. Если команда порождает результирующий набор, он возвращается в виде списка: списка кортежей для mSQL и списка списков для MySQL.

В большинстве случаев различие в типе возвращаемых значений несущественно: кортежи не могут изменяться. Код в большинстве случаев одинаков. Тем не менее следует помнить, что строки MySQL являются списками, а строки mSQL - кортежами, на случай, если вы столкнетесь с ситуацией, где это различие существенно. В примере 11-1 приводится простая Python-программа, обращающаяся к базам данных MySQL и mSQL и выводящая результаты.

Пример 11-1. Обработка запросов в Python дд,я mSQL и MySQL

#!\/usr/local/bin/python

# Импорт модулей import Msql, MySQL;

# Инициализация значений database и query

database = 'db_test';


query = 'SELECT test_id, test_val FROM test';

# Соединение с серверами msql = mSQL.connect();

mysql = MySQL.connect();

# Выбор тестовых баз данных msql.selectdb(database);

mysql.selectdb(database);

# Выполнение запроса

m_result = msql.query(query);

my_result = mysql.do(query);

#Обработка результатов для mSQL

for row in m_result:

# Здесь row является кортежем

print "mSQL- test_id: ",row[0]," test_val: ",row[1];

# Обработка результатов для MySQL

for row in my_result:

ft Здесь row является списком

print "MySQL- test_id: ",row[0]," | test_val: ",row[1];

# Закрыть соединение (только mSQL)

msql.close();

Для обеих баз данных, MySQL и mSQL, приложение просматривает в цикле каждую строку результирующего набора и выводит ее данные. В mSQL первый элемент кортежа представляет первую колонку запроса, а второй элемент - вторую колонку. Аналогично, первый элемент в списке MySQL представляет первую колонку запроса, а второй элемент - вторую колонку.



Содержание раздела