|
Программирование >> Создание клиентов mysql
Параметр 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 # Обновление записей.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |