gpt4 book ai didi

ruby-on-rails - ActiveRecord::Base.connection.execute 一次只执行一条语句吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:31 24 4
gpt4 key购买 nike

我有一堆要在数据库上执行的 SQL 语句。 (据我所知,我正在做 Rails 不提供方法的事情:创建 View 、添加外键等。这主要是为了与数据进行非 Rails 交互。)本质上,我正在做以下:

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

...然后遍历语句。它解决了问题,但如果有更优雅的解决方案,我将有兴趣了解它们。

最佳答案

如果您查看 Rails 代码,您会发现 execute 方法运行传递的 sql,因此它基本上应该运行所有查询,只要它们是 ';'分离且有效。

编辑:抱歉!不,不会,因为它会添加“;”在您的查询字符串和提示语法错误之间

关于ruby-on-rails - ActiveRecord::Base.connection.execute 一次只执行一条语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com