sábado, 27 de febrero de 2016

Ruby sin rails: importar datos en sqlite3

El ejemplo propuesto en este post permite importar un fichero de texto, donde suponemos que cada linea se inserta directamente en la tabla. Los id consecutivos se calculan manualmente por lo que al principio se obtiene el mayor de la tabla.

Observa que:
- Se mete en un bloque que captura posibles excepciones
- En cuanto a la sentencia ten en cuenta que lo correcto es usarla parametrizada para evitar inyección de SQL y para favorecer la reutilización que algunos motores de base de datos hacen de sentencias precompiladas.
- Las sentencias que hacen "FETCH" de datos como las SELECT deben ser cerradas.
#!/bin/ruby
require 'sqlite3'

begin
    db = SQLite3::Database.open "/var/www/rails/muytest/db/development.sqlite3"
    puts db.get_first_value 'SELECT SQLITE_VERSION()'

    stm = db.prepare "SELECT max(id) as id FROM items"
    rs = stm.execute
    row = rs.next
    id = row[0].to_i
    stm.close

    
    sentencia = "INSERT INTO items(id, data) VALUES(?,?);"

    File.open('fichero.txt', 'r') do |f1|
       while linea = f1.gets
           id = id+1
           stm = db.prepare sentencia
           stm.bind_params(id,linea)
       end
    end
end


rescue SQLite3::Exception => e
    puts "Exception occurred"
    puts e
ensure


No hay comentarios:

Publicar un comentario