AntonioGanci

Il blog di Antonio Ganci
posts - 201, comments - 420, trackbacks - 31

Monday, January 2, 2012

Accedere ad un database sqlite con Ruby

In questo post vedremo come accedere ad un database sqlite utilizzando Ruby. La scelta di sqlite è dovuta alla sua estrema semplicità di gestione, in quanto il database consiste in un unico file.

Per prima cosa occorre installare una libreria per poterlo utilizzare da ruby. Basta digitare da terminale gem install sqlite3-ruby.

Ora creiamo il file sqlite-test.rb con il seguente contenuto:

require 'sqlite3'
require 'test/unit'

class DatabaseTest < Test::Unit::TestCase
  def setup
    @db = SQLite3::Database.new 'test.db'
  end

  def teardown
    @db.close
  end

  def test_create
    assert File.exist? 'test.db'
  end

end

 

Come si puo' vedere dal test il database consiste in un unico file test.db creato nella stessa directory. Se lanciamo il test abbiamo barra verde.

Proviamo ora a creare una tabella e ad inserire alcuni dati. Aggiungiamo quindi il test:

def test_create_table
sql = <<SQL
      create table names (
        id int primary key,
        name text
      );
SQL
    @db.execute sql

    assert_equal @db.execute('select * from names'), []
end

 

Proviamo a lanciarlo: Barra verde. Se proviamo però a rilanciarlo otteniamo l'errore: SQLite3::SQLException: table names already exists. Per risolvere il problema cancelliamo la tabella, se esiste, prima di crearla utilizzando il comando: drop table if exists names;. Un'altra alternativa potrebbe essere la cancellazione del file di database.

def test_create_table
sql = <<SQL
      drop table if exists names;
      create table names (
        id int primary key,
        name text
      );
      
SQL
    @db.execute_batch sql

    assert_equal @db.execute('select * from names'), []
end

 

Notare che ho modificato execute con execute_batch perché altrimenti sarebbe stata eseguita solo una delle due query.

A questo punto siamo pronti per inserire alcuni dati e verificare che siano presenti nella tabella

def test_create_table
sql = <<SQL
      drop table if exists names;
      create table names (
        id int primary key,
        name text
      );
      insert into names values(1, 'a');
      insert into names values(2, 'b');
SQL
    @db.execute_batch sql

    assert_equal @db.execute('select * from names'), [[1, 'a'], [2, 'b']]
end

 

Come si puo' leggere dal test i dati vengono restituiti come un array di array.

Altre informazioni su come usare sqlite le potete trovare qui

posted @ Monday, January 2, 2012 6:04 PM | Feedback (2) | Filed Under [ Tips ]

Powered by:
Powered By Subtext Powered By ASP.NET