我有一堆SQL语句要在数据库上执行。 (据我所知,Rails没有提供任何方法,例如创建视图,添加外键等等。这主要是因为非Rails与数据交互。)本质上,我正在做以下:ActiveRecord :: Base.connection.execute一次只能执行一条语句吗?
sql = "statement_1; statement_2; statement_3; etc;"
ActiveRecord::Base.connection.execute(sql)
或者用换行,像这样:
sql = <<EOF
statement_1;
statement_2;
statement_3;
etc;
EOF
ActiveRecord::Base.connection.execute(sql)
(显然,这些语句只需将持有人,但我不认为他们的内容的事项,根据我的测试。)
在任何一种情况下,只有第一条语句被执行,其他条件似乎被忽略。这是怎么回事?每次我尝试多次尝试时,我只会看到第一个语句的效果。我需要分别执行每一个吗?一组语句来自文件,因此只需加载文件的内容并执行即可。如果有更好的策略可以采用,我会对它们感兴趣。
我希望documentation on execute
会有一些亮点,但除了使用单数(“声明”),它不会。也许是因为我使用的数据库引擎? (仅供参考,我使用SQLite的时刻。)
更新:我最后写,做以下的方法:
def extract_sql_statements(sql)
statements = []
sql.split(';').each do |statement|
statement.strip!
unless statement.empty?
statement += ';'
statements << statement
end
end
return statements
end
...然后在statements
循环。它解决了问题,但如果有更优雅的解决方案,我会有兴趣听到它们。
Hrm ...这很有趣。我可以吐出SQL语句,并执行'sqlite3 db.sqlite3
2010-02-02 15:47:55
尽管......它根本没有抱怨,这是奇怪的部分。似乎忽略了第一个陈述的所有内容,并且默默地失败了。 – 2010-02-02 15:52:42
可能是由于不同的dbs,因为我试过在mysql上,而你在sqlite上 – nas 2010-02-02 15:59:57