Программирование >>  Создание клиентов mysql 

1 ... 131 132 133 [ 134 ] 135 136 137 ... 201


Параметр

Host

Passwd

Port

unix socket user

Описание

Стандартная база данных Имя или IP-адрес узла

Пароль

Порт TCP/IP

Путевое имя сокета Имяпользователя

В листинге 21.1 показан минимальный сценарий подключения к серверу MySQL, расположенному на узле localhost. Имя базы данных - test. В сценарии создается указатель набора записей. Вообще-то в MySQL не разрешен непосредственный доступ куказателям, но в библиотеке MySQLdb эти функции имитируются.

# ! /usr/bin/python

import MySQLdb

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

myDB = MySQLdb. Connect (host=localhost, user=4eon, passwd=,

db=test)

# Создание указателя набора записей, cursor = myDB.cursor о

# Отключение. myDB.close()

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

После подключения к серверу баз данных можно посылать ему запросы с помощью методов execute () и executemany {). Оба они вкачестве первого аргумента принимают текст запроса.

Инструкция SELECT и ряд других инструкций, в частности SHOW PROCESSLIST, возвращают результаты запроса в виде набора записей. Метод fetchone () возвращает следующую запись из набора, а метод fetchall () возвращает весь набор в виде массива.

В листинге 21.2 показан сценарий, который извлекает данные из таблицы user и отображает их в виде таблицы. Обратите внимание на то, что сценарий пытается подключиться к серверу от имени пользователя root с явно неправильным паролем. Если будете экспериментировать с этим сценарием, подставьте корректные значения имени пользователя и пароля.



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

#!/usr/bin/python

import

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

myDB = MySQLdb.Connect(host=localhost, user=root,

passwd=pass, db=mysql)

# Создание указателя набора записей, cursor = myDB.cursor()

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

cursor.execute( SELECT User, Host FROM user ORDER BY 1,2 )

# Отображение заголовка таблицы, for field in cursor.description:

width = field[2]

print %-*s % (width, field(0][0:width]), print fieldLen = ()

for field in cursor.description: line =

for i in range (0,field[2]): line += -

print line,

fieldLen += (field[2],) print

# Отображение результатов запроса. resultSet = cursor.fetchall()

for in resultSet:

for cursorField in cursorRecord: width = fieldLen[f]

print %-*s % (width, cursorField[0:width]),

f += 1 print

# Закрытие соединения. myDB.close()

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

Обратите внимание на спецификацию * в команда nt. Она позволяет задавать размерность на этапе выполнения сценария.



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

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

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

#!/usr/bin/python import MySQLdb

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

myDB = MySQLdb.Connect(host=localhost, user=leon,

passwd=pass, db=test)

# Создание указателя набора записей, cursor = myDB. cursor О

Создание

query = \

CREATE TABLE testapi ( + \

ID INT (11) NOT NULL AUTO INCREMENT, + \

Name VARCHAR (64), + \

PRIMARY KEY (ID) + \ II II

cursor.execute(query)

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

query = INSERT INTO testapi (Name) VALUES (%S)

names = ((Leon,), (Vicky,), (Carl,), (Ricky,),

(Nicki,), (Jeff,), (Bob,), (Tina,), (Joey,),) cursor.executemany(query, names) print str(cursor.rowcount) + rows inserted

# Удаление записей.

cursor.execute( DELETE FROM testapi WHERE ID < 4 ) print str (cursor.rowcount) + rows deleted

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



1 ... 131 132 133 [ 134 ] 135 136 137 ... 201

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика