Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Начинаем изучать MySQL
<<-[Весь Текст]
Страница: из 157
 <<-
 
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 представляет первую колонку запроса, 
а второй элемент - вторую колонку.
Обновление
Обновление, вставка и удаление в базе данных производится с помощью того же 
метода API, что и запросы, - просто не требуется обрабатывать результирующий 
набор. Иными словами, вызовите query() или do(), и больше ничего не требуется. 
В MySQL есть дополнительная возможность возврата значения AUTO_INCREMENT , если 
в затронутой таблице есть поле с атрибутом AUTO_INCREMENT .
Динамическое соединение с базами данных
Тот метод API, который мы до сих пор обсуждали в этой главе, дает, в сущности, 
все необходимое для простых и наиболее часто встречающихся повседневных задач 
выборки, вставки, обновления и удаления данных в базе. В некоторых более 
сложных приложениях может оказаться, что вы ничего (или чего-нибудь) не знаете 
о базе данных, с которой соединяетесь и которой посылаете команды. Хотя оба API 
поддерживают метаданные уровня базы данных - информацию времени выполнения о 
базе данных, с которой соединены, - только MySQL API обеспечивает полную 
поддержку динамически генерируемых вызовов SQL, включая метаданные 
результирующего набора.
Описатели команд в MySQL
Как уже отмечалось, в MySQL есть два средства обработки запросов. Более простая 
форма возвращает результирующий набор в виде списка списков. Более сложная 
форма возвращает описатель команды.
Описатель команды представляет результаты обработки запроса к MySQL через метод 
query() (в противоположность использованию метода do()). Пример 11-2 показывает,
 как можно использовать описатель команды для получения информации времени 
выполнения о запросе или команде обновления.
Пример 11-2. Динамический доступ к базе данных MySQL с помощью описателя 
команды
[7:20pm] athens> python
Python 1.5.1 (#1, Jun 13 1998, 22:38:15) [GCC 2.7.2] on- sunos5
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>> import MySQL;
>>> db = MySQL,con.nect();
>>> db.selectdb('db_test-);
>>> result - db.query("INSERT INTO test(test_id,test_val) VALUES(4,
'Bing!')");
>>> print result.affectedrows();
1
>>> result = db.query("SELECT * FROM test");
>>> print result. numrows();
3
>>> print result.fields();
[['test_id', 'test', 'long', 11, 'notnull'], ['test_val', 'test', 'string',
100, "]]
>>> print result, fetchrows(-l);
[[1, 'This is a test.'], [2, 'This is a test.'], [4. 'Bing!']]
>>>
В дополнение к результирующему набору запроса можно с помощью описателя команды 
получить число строк, затронутых операциями обновления, вставки или удаления. В 
примере 11-2 мы получили количество строк, возвращенных запросом, и подробные 
сведения о колонках, представленных в результирующем наборе.
Из новых методов, появившихся в примере 11-2, только fetchrows() не является 
самоочевидным. Этот метод получает очередную группу строк в количестве, 
определяемом переданным ему параметром. Иными словами, при вызове result. 
fetchrows(2) возвращается список, состоящий из очередных двух строк. Метод 
возвращает список, состоящий из всех строк, если ему передан параметр, меньший 
0 — как в данном примере. Сочетая этот метод с обращением к seek(), можно 
перемещаться по результирующему набору. Метод seek() принимает целочисленный 
параметр, указывающий на строку, с которой вы хотите работать, при этом 0 
указывает на первую строку.
Метаданные базы данных
Хотя только MySQL API поддерживает динамическое управление результирующим 
набором (по крайней мере, на момент данной публикации), оба API поддерживают 
метаданные базы данных с помощью почти идентичных наборов методов. Метаданные 
базы данных представляют собой информацию о соединении с базой данных. В 
примере 11-3 приведена сессия Python, заставляющая соединения с MySQL и mSQL 
рассказать о себе.
Пример 11-3. Данные
 
<<-[Весь Текст]
Страница: из 157
 <<-