gpt4 book ai didi

mysql - 在 Ruby on Rails 中,如何使用 dafult db 连接对象向数据库发送多个更新语句?

转载 作者:行者123 更新时间:2023-11-29 19:52:12 28 4
gpt4 key购买 nike

出于性能原因,我需要直接向数据库发出 SQL 语句(插入和更新)。我执行大型插入语句没有问题,例如:

@conn = ActiveRecord::Base.connection
inserts = "INSERT INTO clients (code, name) VALUES ('abc123', 'Alyx'), ('xyz123', 'Gordon') ...many more...\;"
@conn.execute inserts

但是,我在执行一批更新时遇到困难,例如:

updates = "UPDATE clients SET name='Julia' WHERE id=1; UPDATE clients SET name='Eli' WHERE id=2; ...many more..."
@conn.execute updates
# or
@conn.update updates

因为这给了我一般的 SQL 语法错误:

ActiveRecord::StatementInvalid: Mysql2::Error: You have an error in your SQL syntax;

我尝试更改database.yml配置文件以包含MULTI_STATEMENTS标志,但没有成功:

flags:
- MULTI_STATEMENTS

我设法完成这项工作的唯一方法是获取一个设置了标志的 Mysql2 客户端实例:

client = Mysql2::Client.new(host: 'localhost', ... , flags: Mysql2::Client::MULTI_STATEMENTS)
client.query updates

但这似乎不是一个好主意,因为它会将应用程序与 mysql2 gem 锁定在一起。

这是 mysql2 gem、ActiveRecord 的问题,还是我遗漏了一些重要的东西?

最佳答案

所以,我发现没有理由继续使用 ActiveRecord,因为我没有使用它,所以我决定坚持使用 Mysql2::Client

只需确保设置了flags: Mysql2::Client::MULTI_STATEMENTS,并记住在发出另一个命令之前清除以前命令的结果:

while client.next_result
end

此外,尝试使用 ActiveRecord 的原因是事务管理。可以执行相同的操作:

client.query 'BEGIN'
client.query 'COMMIT'
client.query 'ROLLBACK'

关于mysql - 在 Ruby on Rails 中,如何使用 dafult db 连接对象向数据库发送多个更新语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40791906/

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