MySQL. Библиотека профессионала - Аткинсон Л
..pdf
Изменение данных 413
SET Name |
|
$rows |
|
or die execute $query: |
$dbh >errstr |
rows 
I Удаление таблицы.
TABLE testapi";
or die
execute $query: 
$dbh >errstr
PYTHON
Вэтой главе.
•Подготовка программы
•Извлечение данных
•Изменение данных



van
назвал свой объектно ориентированный язык сценариев Python в честь известного британского комедийного телесериа ла "Monty Python's Flying Circus". Сценарии Python выполняются в UNIX, Win
dows и многих других операционных системах. Язык Python ценится многими за про стоту изучения.
В этой главе рассматривается
библиотека языка Python, предназна ченная для взаимодействия с серверами MySQL.
что читатели умеют писать программы на этом языке. Тем, кому он в диковинку, советуем посетить 
узел www.python.org. Там есть много ресурсов, посвященных изучению языка.
Подготовка программы
Авторы проекта Python разработали спецификацию DBI API 2.0 для д райверов баз данных. Благодаря этому взаимодействие с базами данных осуществляется унифици рованным образом. Драйвер MySQL реализован Энди
(Andy Dustman) и доступен по адресу http://dustman.net/andy/python/MySQLdb либо 
Там можно загрузить исходные коды и модули
для Linux. Ес ли сценарии Python предполагается запускать в Windows, то 
(Gerhard
предлагает скомпилированную версию библиотеки MySQLdb на своем узле по адресу 
Подробное описание процедуры инсталляции выходит за рамки данной книги. В архивах MySQLdb содержатся сведения по компиляции и инсталляции модуля. Сценарий 
автоматически управляет всем процессом.
Подключиться к серверу MySQL из сценария Python несложно. Достаточно им портировать модуль MySQLdb и вызвать метод Connect
Параметры метода пере числены в табл. 21.1. Он возвращает объект Connection, который можно использо вать для получения объекта Cursor.
Глава
Python
Параметр |
Описание |
Стандартная база данных
|
Имя или IP адрес узла |
|
Пароль |
Port |
TCP/IP |
|
Путевое имя |
user |
Имяпользователя |
В листинге 21.1 показан минимальный сценарий подключения к серверу MySQL, расположенному на узле
Имя базы
test. В сценарии создается указатель набора записей. Вообще то в MySQL не разрешен непосредственный доступ к указателям, но в библиотеке
эти функции имитируются.
import MySQLdb
Подключение к серверу баз данных.
= 
Создание указателя набора cursor 

Отключение.
Извлечение данных
После подключения к серверу баз данных можнопосылать ему запросы с помощью методов execute
и 
Оба они вкачестве первого аргумента при нимают текст запроса.
Инструкция SELECT и ряд других инструкций, в частности SHOW PROCESSLIST, воз вращают результаты
в виде набора записей. Метод f 
возвращает
дующую запись из набора, а метод f
возвращает весь набор в виде массива.
В листинге 21.2 показан сценарий, который извлекает данные из таблицы user и отображает их в виде таблицы. Обратите внимание на то, что сценарий пытается подключиться к серверу от имени пользователя root с явно неправильным паролем. Если будете экспериментировать с этим сценарием, подставьте корректные значения имени пользователя и пароля.
Извлечение данных
import
Подключение к серверу баз
= |
|
|
Создание указателя набора |
|
|
cursor |
|
|
Выполнение |
|
|
|
User, |
Host FROM user ORDER BY 1,2") |
Отображение заголовка |
|
|
for field |
in |
|
width |
field[2] |
|
% (width, |
|
|
|
|
|
for field |
in |
|
line |
|
|
for |
in range |
line |
print line, fieldLen 
Отображение результатов запроса.
for
in resultSet: f=0
for
in cursorRecord: width 

print
% (width, f
1
Закрытие соединения.
Перед выборкой значений столбцов сценарий создает строку заголовка, включая в нее имена столбцов. Массив описаний столбцов хранится в свойстве description. Каждое описание включает семь атрибутов: имя, тип, отображаемая
внутренняя размерность, точность, степень масштабирования для десятичных 
цов и допустимость значений NULL. В листинге 21.2 |
результаты форматируются на |
основании отображаемой размерности. |
|
Обратите внимание на спецификацию * в команде |
Она позволяет задавать |
размерность на этапе выполнения сценария. |
|
Изменение данных
testapi SET Name |
|
rows updated" |
|
Удаление таблицы. |
|
TABLE |
testapi") |
БИБЛИОТЕКА
MYSQL++
Вэтой главе.
•Подготовка программы
•Извлечение данных
•Изменение данных
руппа разработчиков MySQL выпустила
официальную библиотеку классов языка C++, предназначенных для взаимодействия с MySQL. Изначально написанная Кевином
(не родственник), она в настоящее время со провождается уже упоминавшимся 
Библиотека
работает с большинством компиляторов
включая GNU C++ и Visual C++компа
нии Microsoft.
В этой главе предполагается, что читатели имеют опыт написания и компиляции программ C++. БиблиотекаMySQL++ описывается лишь в общих чертах. Узнать о ней подробнее и загрузить исходный код можно по адресу 
Подготовка программы
При использовании библиотеки MySQL++ необходимо включить в программу
файл |
Стандартный make файл инсталлирует файлы заголовков этой |
|
библиотеки в каталог |
в отличие от файлов клиентской биб |
|
лиотеки MySQL, размещаемых в каталоге |
Если эту ус |
|
тановку нужно изменить, отредактируйте |
или сконфигурируйте компиля |
|
тор соответствующим образом. |
|
|
Библиотека MySQL++ использует функции библиотеки языка С, поэтому на этапе
компиляции нужно подключить два файла: |
и |
С файлом |
|
такая же ситуация, как и сфайлами заголовков. По умолчанию он находится |
|||
в каталоге |
а не |
|
Ниже показан пример |
компиляции тестового клиента. |
|
с++ о minimal |
\ |
|
\ |

в 
не самый эффективный
Подключение модуля use DBI;
Подключение к базе данных. my $dbh 

execute $query: 
$dbh >errstr
"INSERT INTO testapi (Name) VALUES
$dbh >errstr 

row 
rows 
Python
но извлекать записи нет необхо димости. Если требуется узнать число добавленных или измененных записей, вос пользуйтесь свойством rowcount объекта cursor.
вызова метода 
Вместо значения имени в тексте запроса стоит специфика ция
которая заменяется реальным значением при вызове метода executemany
Вторым аргументом этого метода является массив списков. Каждый список
ствует одной добавляемой записи, а элементы
па раметрам запроса. В лис
"INSERT INTO testapi (Name) VALUES names 

4")