Ruby 从外部.SQL文件执行SQL语句
我有一个Ruby 从外部.SQL文件执行SQL语句,ruby,sequel,Ruby,Sequel,我有一个schema.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, se
schema.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');
我想将这些语句应用于我的数据库,以创建一个兼容的模式。是否有一个干净的方法来实现这一点
清洁在这里的意思是:
- 纯红宝石/续集
- 独立于底层数据库引擎
- 不解析
文件.sql
ActiveRecord
方法执行它们
ActiveRecord::Base.execute File.read('PATH_TO_FILE')
或与续集一起使用
:
DB.run File.read('PATH_TO_FILE')
因为我并没有忘记给我的问题贴上标签,我需要一个答案。虽然我在Sequel(
Database#run
)中考虑过使用类似的方法,但我没有感觉到它会乐意接受被换行符截断的语句,所以我特别询问在手动加载之前是否有一种简单的方法。啊,很抱歉。无论如何,Database#run
对换行符没有问题;另外,如果您不希望换行符出现,您可以gsub/\n/,''
。好的,很高兴听到您对由完成的换行符处理持肯定态度。然而,为什么您要提出gsub
,我希望它将所有行连接在一个巨大的非法SQL语句中?我检查了这是数据库#run
确实可以很好地处理我的.SQL
文件,尽管有多行语句。我应该有更多的信心。请编辑您的答案,以便我可以接受。请注意,Sequel::Database#run
未指定在单个字符串中处理多个语句。此时您正在处理未定义的行为,它是否有效取决于底层驱动程序。