class Daru::IO::Importers::SQL
SQL
Importer Class, that extends `from_sql` and `read_sql` methods to `Daru::DataFrame`
Public Class Methods
new()
click to toggle source
Checks for required gem dependencies of SQL
Importer
# File lib/daru/io/importers/sql.rb, line 12 def initialize optional_gem 'dbd-sqlite3', requires: 'dbd/SQLite3' optional_gem 'activerecord', '~> 4.0', requires: 'active_record' optional_gem 'dbi' optional_gem 'sqlite3' end
Public Instance Methods
call(query)
click to toggle source
Imports a `Daru::DataFrame` from SQL
Importer instance
@param query [String] The query to be executed
@return [Daru::DataFrame]
@example Importing with a SQL
query
df = instance.call("SELECT * FROM test") #=> #<Daru::DataFrame(2x3)> # id name age # 0 1 Homer 20 # 1 2 Marge 30
# File lib/daru/io/importers/sql.rb, line 62 def call(query) @query = query @conn, @adapter = choose_adapter(@dbh, @query) df_hash = result_hash Daru::DataFrame.new(df_hash).tap(&:update) end
from(dbh)
click to toggle source
Loads from a DBI connection
@!method self.from(dbh)
@param dbh [DBI::DatabaseHandle] A DBI connection.
@return [Daru::IO::Importers::SQL]
@example Importing from a DBI connection
instance = Daru::IO::Importers::SQL.from(DBI.connect("DBI:Mysql:database:localhost", "user", "password"))
# File lib/daru/io/importers/sql.rb, line 29 def from(dbh) @dbh = dbh self end
read(path)
click to toggle source
Reads from a sqlite.db file
@!method self.read(path)
@param path [String] Path to a SQlite3 database file.
@return [Daru::IO::Importers::SQL]
@example Reading from a sqlite.db file
instance = Daru::IO::Importers::SQL.read('path/to/sqlite.db')
# File lib/daru/io/importers/sql.rb, line 44 def read(path) @dbh = attempt_sqlite3_connection(path) if Pathname(path).exist? self end
Private Instance Methods
attempt_sqlite3_connection(db)
click to toggle source
# File lib/daru/io/importers/sql.rb, line 71 def attempt_sqlite3_connection(db) DBI.connect("DBI:SQLite3:#{db}") rescue SQLite3::NotADatabaseException raise ArgumentError, "Expected #{db} to point to a SQLite3 database" end
choose_adapter(db, query)
click to toggle source
# File lib/daru/io/importers/sql.rb, line 77 def choose_adapter(db, query) query = String.try_convert(query) or raise ArgumentError, "Query must be a string, #{query.class} received" case db when DBI::DatabaseHandle [db, :dbi] when ::ActiveRecord::ConnectionAdapters::AbstractAdapter [db, :activerecord] else raise ArgumentError, "Unknown database adapter type #{db.class}" end end
column_names()
click to toggle source
# File lib/daru/io/importers/sql.rb, line 91 def column_names case @adapter when :dbi result.column_names when :activerecord result.columns end end
result()
click to toggle source
# File lib/daru/io/importers/sql.rb, line 100 def result case @adapter when :dbi @conn.execute(@query) when :activerecord @conn.exec_query(@query) end end
result_hash()
click to toggle source
# File lib/daru/io/importers/sql.rb, line 109 def result_hash column_names .map(&:to_sym) .zip(rows.transpose) .to_h end
rows()
click to toggle source
# File lib/daru/io/importers/sql.rb, line 116 def rows case @adapter when :dbi result.to_a.map(&:to_a) when :activerecord result.cast_values end end