Я рекомендую избегать написания необработанного SQL, и в этом возрасте я бы использовал ORM даже для простого использования БД.Я настоятельно рекомендую использовать камень Sequel .Заимствование из примера в документации по сиквелу:
sequel sqlite://temp
Your database is stored in DB...
Использование SQLite, которое запустило сиквел ORM в интерактивном режиме и создало базу данных SQLite с именем «temp».1009 *
Это включило ведение журнала, поэтому мы можем видеть, что будет делать Sequel при обращении к базе данных.
ruby-1.9.2-p290 :003 > items = DB[:items] # Create a dataset
=> #<Sequel::SQLite::Dataset: "SELECT * FROM `items`">
ruby-1.9.2-p290 :004 > DB.tables
I, [2011-11-25T10:17:13.056311 #10130] INFO -- : (0.000501s) SELECT * FROM `sqlite_master` WHERE (type = 'table' AND NOT name = 'sqlite_sequence')
=> []
Doh!Я забыл создать таблицу ...
ruby-1.9.2-p290 :005 > DB.create_table :items do
ruby-1.9.2-p290 :006 > primary_key :id
ruby-1.9.2-p290 :007?> String :name
ruby-1.9.2-p290 :008?> Float :price
ruby-1.9.2-p290 :009?> end
I, [2011-11-25T10:17:20.985851 #10130] INFO -- : (0.002372s) CREATE TABLE `items` (`id` integer PRIMARY KEY AUTOINCREMENT, `name` varchar(255), `price` double precision)
=> nil
Таблица создана.
ruby-1.9.2-p290 :010 > items = DB[:items] # Create a dataset
=> #<Sequel::SQLite::Dataset: "SELECT * FROM `items`">
Это создало набор данных, который является просто удобным способом общения с таблицей.
И вот что выплачивается:
ruby-1.9.2-p290 :011 > items.insert(:name => "Joan d'Arc")
I, [2011-11-25T10:17:45.186945 #10130] INFO -- : (0.001981s) INSERT INTO `items` (`name`) VALUES ('Joan d''Arc')
=> 1
ORM автоматически экранирует символы за вас.Ваша работа значительно упрощена.
ORM осведомлены о DBM, поэтому они знают, когда нужно бежать для конкретной базы данных.Ваш код не меняется.Переключаться с SQLite на MySQL, Postgres или даже не-SQL базы данных тривиально.