Вопрос о рубиновом стиле от новичка - PullRequest
1 голос
/ 14 мая 2009
USER = "user"
PASS = "pass"

QUERY = "SELECT c1, c2, c3, c4, c5, c6, c7 FROM table"

SQLITE_SCHEMA = 'c1, c2, c3, c4, c5, c6, c7'

sqlite_db = SQLite3::Database.new('sqlite.db')
odbc_db = DBI.connect('DBI:ODBC:database', USER, PASS)
odbc_db.select_all(QUERY) do |entry|
  sqlite_db.execute "insert into smnt (" + SQLITE_SCHEMA + ") values ('" + entry[0].to_s + "','" + 
                                                                           entry[1].to_s + "','" + 
                                                                           entry[2].to_s + "','" +
                                                                           entry[3].to_s + "','" +
                                                                           entry[4].to_s + "','" + 
                                                                           entry[5].to_s + "','" +
                                                                           entry[6].to_s + "')" 
  end

Должен быть более чистый способ написания строки db.execute, или я придирчив?

Ответы [ 3 ]

4 голосов
/ 14 мая 2009

Помимо цикла в ответе гипоксида, также рассмотрите возможность использования переменной интерполяции:

sqlite_db.execute "insert into smnt (#{SQLITE_SCHEMA}) 
  values (#{entry.map {|e| "'#{e.to_s}'"}.join(',')})"

Обратите внимание, что ваши entry элементы лучше всего продезинфицировать или быть готовыми к миру боли, Бобби стиль

1 голос
/ 14 мая 2009

Как насчет:

" VALUES (#{entry.collect{|e|"'"+e.to_s+"'"}.join(",")})"
1 голос
/ 14 мая 2009

Вы можете написать цикл for для строки ... вы бы сохранили несколько строк кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...