2013-03-06 252 views
1

我有一個schema.sql文件包含SQL語句,如形式的官方數據庫結構:執行SQL語句

CREATE TABLE directory (id INTEGER PRIMARY KEY, base TEXT, index_file TEXT, default_ctype TEXT, cache_ttl INTEGER DEFAULT 0); 
CREATE TABLE handler (id INTEGER PRIMARY KEY, 
    send_spec TEXT, 
    send_ident TEXT, 
    recv_spec TEXT, 
    recv_ident TEXT, 
    raw_payload INTEGER DEFAULT 0, 
    protocol TEXT DEFAULT 'json'); 

我想申請這些語句到我的數據庫創建一個兼容的模式。有沒有一個乾淨的方法來實現這一目標?

清潔的含義在這裏:

  • 純Ruby /續集
  • 獨立於底層數據庫引擎
  • 沒有解析.sql文件

回答

2

要麼我沒有正確理解目標或者爲什麼不從文件中讀取語句並使用默認的ActiveRecord方法執行它們?

ActiveRecord::Base.execute File.read('PATH_TO_FILE') 

Sequel

DB.run File.read('PATH_TO_FILE') 
+0

因爲我沒有忘掉標記我的問題[標籤:ActiveRecord的],需要一個[標籤:續集]答案。話雖如此,我着眼於在Sequel('Database#run')中使用類似的方法,但我沒有感到它會高興地接受換行符截斷的語句,所以我特別詢問在使用手動加載之前是否有簡單的方法。 – 2013-03-06 12:18:27

+1

啊,對不起。無論如何,'數據庫#運行'沒有新行出現問題;再加上你可能'gsub/\ n /,'''如果你不想換行符在那裏。 – mudasobwa 2013-03-06 12:30:47

+0

好的,很高興聽到你對[tag:sequel]完成的換行處理是積極的。但是,那麼爲什麼你提出'gsub',我希望在一個巨大的非法SQL語句中將所有行加入到一起呢? – 2013-03-06 12:41:02