Módulo DBI para acesso a dados no Ruby
Publicado por Daniel Vinciguerra (última atualização em 27/06/2016)
[ Hits: 4.210 ]
Homepage: http://bivee.com.br
Quando falamos de Ruby, já nos vem a memória o Rails (framework web mais famoso de todos os tempos), e com o Rails, está sempre junto seu fiel escudeiro, o ActiveRecord.
Mas, e quando queremos acessar um banco de dados para extrair informações, e não queremos ter que instalar todo um ORM para isso?
A dica é usar o DBI, que é um módulo Ruby que portou a ideia do DBI do Perl para criar uma interface comum de acesso a vários bancos de dados através de drivers.
Então, este script pretende mostrar como fazer um acesso a dados simples usando este módulo.
PRÉ-REQUISITOS
- ruby
- Módulo dbi instalado
- Driver do banco de dados (dbd-sqlite3, por exemplo)
REFERÊNCIAS
https://rubygems.org/gems/dbi
https://rubygems.org/gems/dbd-sqlite3
INSTALANDO AS GEMS
$ gem install dbi
$ gem install dbd-sqlite3
EXECUTANDO
$ ruby dbi.rb
#!/usr/bin/env ruby
# 2016 (c) Daniel Vinciguerra
# importa o modulo dbi
require 'dbi'
    
# delete database 
if File.exist? File.expand_path('database.db')
  File.unlink File.expand_path('database.db')
end
# imprime todos os dados da tabela
def table_data (message)
  puts "\n\n[DEBUG] #{message}:";
  puts "%-2s %-10s %-80s" % ['ID', 'NOME', 'CRIADOR'];
  puts '-' * 60;
  DBI.connect('DBI:SQLite3:database.db') do |dbh|
    dbh.select_all('SELECT * FROM linguagem') do | row |
      puts "%-2s %-10s %-80s" % row.to_a
    end
  end
end
# conexão com banco de dados
DBI.connect('DBI:SQLite3:database.db') do |dbh|
 
  # executando sqls
  dbh.do(<<-SQL);
    CREATE  TABLE linguagem (
      "id" INTEGER PRIMARY KEY AUTOINCREMENT,
      "nome" VARCHAR(20) NOT NULL,
      "criador" VARCHAR(80) NOT NULL
    );
  SQL
  
  # inserindo dados no banco
  sql = "INSERT INTO linguagem ('nome', 'criador') VALUES (?, ?)"  
  dbh.do(sql, 'Perl', 'Larry Wall')
  dbh.do(sql, 'Python', 'Guido van Rossum')
  
  # obtendo os dados iniciais
  table_data("DADOS INICIAIS");
  # inserindo dados (INSERT)
  sql = "INSERT INTO linguagem ('nome', 'criador') VALUES (?, ?)"
  dbh.prepare(sql) do |sth|
    sth.execute('Ruby', 'Yukihiro Matsumoto')
  end
  # obtendo os dados após insert
  table_data("DADOS APOS INSERT");
  
  # buscando o ID
  lang = {}
  sql = "SELECT * FROM linguagem WHERE id = ? LIMIT 1"
  dbh.prepare(sql) do |sth|
    sth.execute(3)
    lang = sth.fetch
  end
  # atualizando os dados (UPDATE)
  if lang
    sql = "UPDATE linguagem SET 'criador' = ? WHERE id = ?"  
    dbh.do(sql, 'Matz :)', lang[:id])
  end
  # obtendo os dados após update
  table_data("DADOS APOS UPDATE");
  # exclui um dado (DELETE)
  sql = "DELETE FROM linguagem WHERE nome != ?"  
  dbh.do(sql, 'Ruby')
  # obtendo os dados após delete
  table_data("DADOS APOS DELETE");
end
Sistema de simulação de fabricantes de carros
Postmon - Consumindo uma API com Ruby
Faça uma lista com o nome de pessoas
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Programa fora de escala na tela do pc (36)
Instalação dualboot Windows 11 e Debian 13 (0)
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (0)









