Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MySQL. Библиотека профессионала - Аткинсон Л

..pdf
Скачиваний:
166
Добавлен:
24.05.2014
Размер:
10.41 Mб
Скачать

Глава 20. Perl

девять имен, вставляемых в базу данных. В цикле for вызывается метод execute в котором параметру инструкции INSERT (обозначается символом по очереди при сваиваются значения, хранящиеся в массиве. Учитывая, что в MySQL поддерживается многострочная инструкция INSERT, не самый эффективный метод вставки имен,

но он удобен, когда требуется выполнять произвольные пользовательские запросы.

Подключение модуля use DBI;

my my

Подключение к базе данных. my $dbh

Создание таблицы.

$query

"CREATE TABLE

"ID

(11) NOT NULL

"Name

 

"PRIMARY

or die execute $query: $dbh >errstr

$query "INSERT INTO testapi (Name) VALUES

my

my $sth

 

or die prepare $query:

$dbh >errstr

my

$n

or die "Can't execute $query: $dbh >errstr row

Удаление

записей.

 

 

FROM testapi WHERE ID

4";

$rows

 

 

or die

execute $query:

$dbh >errstr

rows

tt Обновление записей.

Изменение данных 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]

 

print

% (width,

 

print

 

 

for field

in

 

line

 

 

for

in range

line

print line, fieldLen

print

Отображение результатов запроса.

for in resultSet: f=0

for in cursorRecord: width

print % (width, f 1

print

Закрытие соединения.

Перед выборкой значений столбцов сценарий создает строку заголовка, включая в нее имена столбцов. Массив описаний столбцов хранится в свойстве description. Каждое описание включает семь атрибутов: имя, тип, отображаемая внутренняя размерность, точность, степень масштабирования для десятичных

цов и допустимость значений NULL. В листинге 21.2

результаты форматируются на

основании отображаемой размерности.

 

Обратите внимание на спецификацию * в команде

Она позволяет задавать

размерность на этапе выполнения сценария.

 

418 Глава Python

Изменение данных

Запросы на вставку или обновление данных не возвращают наборы записей. Они тоже выполняются с помощью метода execute но извлекать записи нет необхо димости. Если требуется узнать число добавленных или измененных записей, вос пользуйтесь свойством rowcount объекта cursor.

Сценарий, показанный в листинге 21.3, создает таблицу и добавляет в нее записи. Далее происходит удаление части записей, обновление записей и, наконец, удаление всей таблицы. Обратите внимание на способ вставки записей. В массиве names со держатся девять имен, добавляемых в таблицу путем вызова метода Вместо значения имени в тексте запроса стоит специфика ция которая заменяется реальным значением при вызове метода executemany Вторым аргументом этого метода является массив списков. Каждый список ствует одной добавляемой записи, а элементы па раметрам запроса. В лис

тинге 21.3 у инструкции INSERT один параметр, поэтому кажется, будто в определе нии массива names стоит слишком много скобок и запятых. На самомделе хвостовые запятые нужны для правильного определения типа массива.

import

Подключение к серверу баз данных.

=

Создание указателя набора

cursor

 

 

Создание

 

query

\

 

"CREATE TABLE

\

"ID

NOT NULL

\

"Name

\

"PRIMARY

\

Вставка записей.

query "INSERT INTO testapi (Name) VALUES names

 

names)

print

rows inserted"

Удаление

FROM testapi WHERE ID 4")

print str

rowcount)

rows deleted"

Обновление

Изменение данных

testapi SET Name

print

rows updated"

Удаление таблицы.

 

TABLE

testapi")

БИБЛИОТЕКА

MYSQL++

Вэтой главе.

Подготовка программы

Извлечение данных

Изменение данных

руппа разработчиков MySQL выпустила официальную библиотеку классов языка C++, предназначенных для взаимодействия с MySQL. Изначально написанная Кевином (не родственник), она в настоящее время со провождается уже упоминавшимся Библиотека работает с большинством компиляторов включая GNU C++ и Visual C++компа

нии Microsoft.

В этой главе предполагается, что читатели имеют опыт написания и компиляции программ C++. БиблиотекаMySQL++ описывается лишь в общих чертах. Узнать о ней подробнее и загрузить исходный код можно по адресу

Подготовка программы

При использовании библиотеки MySQL++ необходимо включить в программу

файл

Стандартный make файл инсталлирует файлы заголовков этой

библиотеки в каталог

в отличие от файлов клиентской биб

лиотеки MySQL, размещаемых в каталоге

Если эту ус

тановку нужно изменить, отредактируйте

или сконфигурируйте компиля

тор соответствующим образом.

 

Библиотека MySQL++ использует функции библиотеки языка С, поэтому на этапе

компиляции нужно подключить два файла:

и

С файлом

такая же ситуация, как и сфайлами заголовков. По умолчанию он находится

в каталоге

а не

 

Ниже показан пример

компиляции тестового клиента.

 

с++ о minimal

\

 

\