Módulo DBI para acesso a dados no Ruby
Publicado por Daniel Vinciguerra (última atualização em 27/06/2016)
[ Hits: 4.414 ]
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
Crivo de Eratóstenes Simples em Ruby
O Journal no Linux para a guarda e consulta de logs do sistema
A evolução do Linux e as mudanças que se fazem necessárias desde o seu lançamento
Maquina modesta - a vez dos navegadores ferrarem o usuario
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Sway no Arch Linux: configuração Inicial sem enrolação
Resolvendo o bloqueio do Módulo Warsaw no Arch Linux (Porta 30900)
Continuando meus tópicos anteriores (0)
Saída de loop após teste de if. (2)
Governo da França vai trocar Windows por Linux (9)
Warsaw não é reconhecido no Google Chrome 147.0.7727.55 [RESOLVIDO] (9)









