Módulo DBI para acesso a dados no Ruby
Publicado por Daniel Vinciguerra (última atualização em 27/06/2016)
[ Hits: 4.232 ]
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
Exemplos de comentários e operadores de impressão na tela
Crivo de Eratóstenes Simples em Ruby
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Estou tentando ser legalista, mas tá complicado! (0)
É normal não gostar de KDE? (17)
PERFIL CRIADO NO SAMBA AD DC NÃO LOGA NO WINDOWS 10 E 11 (1)
PERFIL CRIADO NO SAMBA AD DC NÃO LOGA NO WINDOWS 10 E 11 (1)









