Книга: Программирование на языке Ruby

10.4.2. Интерфейс с MySQL

10.4.2. Интерфейс с MySQL

Интерфейс Ruby с MySQL — один из самых стабильных и полнофункциональных среди всех интерфейсов с базами данных. Это расширение, которое должно устанавливаться после инсталляции Ruby и MySQL.

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

require 'mysql'
m = Mysql.new("localhost","ruby","secret","maillist")
r = m.query("SELECT * FROM people ORDER BY name")
r.each_hash do |f|
 print "#{f['name']} - #{f['email']}"
end
# Выводится что-то вроде:
# John Doe - [email protected]
# Fred Smith - [email protected]

Особенно полезны методы класса Mysql.new и MysqlRes.each_hash, а также метод экземпляра query.

Модуль состоит из четырех классов (Mysql, MysqlRes, MysqlField и MysqlError), описанных в файле README. Мы приведем сводку некоторых наиболее употребительных методов, а дополнительную информацию вы сможете найти сами в официальной документации.

Метод класса Mysql.new принимает несколько строковых параметров, которые по умолчанию равны nil, и возвращает объект, представляющий соединение. Параметры называются host, user, passwd, db, port, sock и flag. У метода new есть синонимы real_connect и connect.

Методы create_db, select_db и drop_db принимают в качестве параметров имя базы данных и используются, как показано ниже. Метод close закрывает соединение с сервером.

m=Mysql.new("localhost","ruby","secret")
m.create_db("rtest")  # Создать новую базу данных.
m.select_db("rtest2") # Выбрать другую базу данных.
in.drop_db("rtest")   # Удалить базу данных.
m.close               # Закрыть соединение.

В последних версиях методы create_db и drop_db объявлены устаревшими. Но можно «воскресить» их, определив следующим образом:

class Mysql
 def create_db(db)
  query("CREATE DATABASE #{db}")
 end
 def drop_db(db)
  query("DROP DATABASE #{db}")
 end
end

Метод list_dbs возвращает список имен доступных баз данных в виде массива.

dbs = m.list_dbs # ["people","places","things"]

Метод query принимает строковый параметр и по умолчанию возвращает объект MysqlRes. В зависимости от заданного значения свойства query_with_result может также возвращаться объект Mysql.

Если произошла ошибка, то ее номер можно получить, обратившись к методу errno. Метод error возвращает текст сообщения об ошибке.

begin
 r=m.query("create table rtable
 (
  id int not null auto_increment,
  name varchar(35) not null,
  desc varchar(128) not null,
  unique id(id)
 )")
# Произошло исключение...
rescue
 puts m.error
  # Печатается: You have an error in your SQL syntax
  # near 'desc varchar(128) not null ,
  # unique id(id)
  # )' at line 5"
 puts m.errno
  # Печатается 1064
  # ('desc' is reserved for descending order)
end

Ниже перечислено несколько полезных методов экземпляра, определенных в классе MysqlRes:

• fetch_fields возвращает массив объектов MysqlField, соответствующих полям в следующей строке;

• fetch_row возвращает массив значений полей в следующей строке;

• fetch_hash(with_table=false) возвращает хэш, содержащий имена и значения полей в следующей строке;

• num_rows возвращает число строк в результирующем наборе;

• 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.

Оглавление книги


Генерация: 1.147. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз