2013-03-06 157 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