我在使用 Ruby 中的 Mysql2 客户端时遇到一个奇怪的问题。尝试执行以下操作时:
client.query("CREATE DATABASE ...; INSERT INTO ..."); #SQL truncated for brevity
client.query("SELECT 1 FROM ...") #SQL truncated for brevity
Ruby 抛出一个错误,指出我从中选择的表不存在。但是,如果我尝试以下操作:
client.query("CREATE DATABASE ...; INSERT INTO ..."); #SQL truncated for brevity
sleep 1
client.query("SELECT 1 FROM ...") #SQL truncated for brevity
查询没有问题。似乎我需要给 MySQL 服务器一些时间来加载数据,然后才能查询它。谁能解释为什么会这样,以及如何在不使用 sleep 的情况下以编程方式克服这个问题?
更新
我这样初始化客户端:
Mysql2::Client.new({
:adapter => "mysql2",
:host => ip_address,
:username => db_username,
:password => db_password,
:flags => Mysql2::Client::MULTI_STATEMENTS
})
我检查了“query_options”属性并将异步设置为 false。我已尝试将 async => false 标志显式设置为无济于事。
如果我使用
也会发生同样的问题Model.connection.execute(SQL HERE)
请注意,这都是在 Rails 单元测试中执行的。
谢谢
最佳答案
出于某种原因,唯一可以正常工作并且不需要中间的 sleep 1
的是以下内容:
@model = Model.new
Mysql2::Client.default_query_options[:connect_flags] |= Mysql2::Client::MULTI_STATEMENTS
@model.connection.reconnect!
关于mysql - 快速连续执行语句时出现Ruby mysql2错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14914314/