• each— итератор, последовательно возвращающий массив значений полей;
• each_hash(with_table=false)— итератор, последовательно возвращающий хэш вида {имя_поля => значение_поля}(пользуйтесь нотацией x['имя_поля']для получения значения поля).
Вот некоторые методы экземпляра, определенные в классе MysqlField:
• nameвозвращает имя поля;
• tableвозвращает имя таблицы, которой принадлежит поле;
• lengthвозвращает длину поля, заданную при определении таблицы;
• max_lengthвозвращает длину самого длинного поля в результирующем наборе;
• hashвозвращает хэш с именами и значениями следующих элементов описания: name, table, def, type, length, max_length, flags, decimals.
Если изложенный здесь материал противоречит онлайновой документации, предпочтение следует отдать документации. Более подробную информацию вы найдете на официальном сайте MySQL (http://www.mysql.com) и в архиве приложений Ruby.
10.4.3. Интерфейс с PostgreSQL
В архиве RAA есть также расширение, реализующее доступ к СУБД PostgreSQL (работает с версиями PostgreSQL 6.5/7.0).
В предположении, что PostgreSQL уже установлена и сконфигурирована (и в базе данных есть таблица testdb), нужно лишь выполнить те же шаги, что и для всех остальных интерфейсов Ruby с базами данных: загрузить модуль, установить соединение с базой данных и начать работу. Надо полагать, вам понадобится способ послать запрос, получить результаты и работать с транзакциями.
require 'postgres'
conn = PGconn.connect("", 5432, "", "", "testdb")
conn.exec("create table rtest ( number integer default 0 );")
conn.exec("insert into rtest values ( 99 )")
res = conn.query("select * from rtest")
# res id [["99"]]
В классе PGconnесть метод connect, который принимает обычные параметры для установления соединения: имя хоста, номер порта, имя базы данных, имя и пароль пользователя. Кроме того, третий и четвертый параметры — соответственно, флаги и параметры терминала. В приведенном примере мы установили соединение через сокет UNIX от имени привилегированного пользователя, поэтому не указывали ни имя пользователя, ни пароль, а имя хоста, флаги и параметры терминала оставили пустыми. Номер порта должен быть целым числом, а остальные параметры — строками. У метода connectесть синоним new.
Для работы с таблицами нужно уметь выполнять запросы. Для этого служат методы PGconn#execи PGconn#query.
Метод execпосылает переданную ему строку — SQL-запрос — серверу PostgreSQL и получает ответ в виде объекта PGresult, если выполнение завершилось успешно. В противном случае он возбуждает исключение PGError.
Метод queryтакже посылает свой строковый параметр в виде SQL-запроса. Но в случае успеха получает массив кортежей. В случае ошибки возвращается nil, а подробности можно получить, вызвав метод error.
Имеется специальный метод insert_tableдля вставки записи в указанную таблицу. Вопреки названию он не создает новую таблицу, а добавляет данные в существующую. Этот метод возвращает объект PGconn.
conn.insert_table("rtest",[[34]])
res = conn.query("select * from rtest")
res равно [["99"], ["34"]]
В этом примере в таблицу rtestвставляется одна строка. Для простоты мы указали только одну колонку. Отметим, что объект resкласса PGresultпосле обновления возвращает массив из двух кортежей. Чуть ниже мы рассмотрим методы, определенные в классе PGresult.
В классе PGconnопределены также следующие полезные методы:
• dbвозвращает имя базы, с которой установлено соединение;
• hostвозвращает имя сервера, с которым установлено соединение;
• userвозвращает имя аутентифицированного пользователя;
• errorвозвращает сообщение об ошибке;
• finish, closeзакрывают соединение;
• loimport(file)импортирует файл в большой двоичный объект (BLOB), в случае успеха возвращает объект PGlarge, иначе возбуждает исключение PGError;
• loexport(oid, file)выгружает BLOB с идентификатор oidв указанный файл;
• locreate([mode])возвращает объект PGlargeв случае успеха, иначе возбуждает исключение PGError;
• loopen(oid, [mode])открывает BLOB с идентификатором oid. Возвращает объект PGlargeв случае успеха. Аргумент modeзадает режим работы с открытым объектом: "INV_READ"или "INV_WRITE"(если этот аргумент опущен, по умолчанию предполагается "INV_READ");
Читать дальше
Конец ознакомительного отрывка
Купить книгу