mysql - 使用 Sequel gem 检索多个数据集

标签 mysql ruby mysql2 sequel

我以最基本的方式使用Sequel gem - 连接到本地数据库并提取结果。

一个问题是我的代码依赖于我能够一次执行多个查询语句(不能将它们分开)。

我是

  • 使用 mysql2 适配器
  • 使用 MULTIPLE_STATEMENTS 标志执行多个语句

下面是我的脚本。

require 'sequel'

conn = Sequel.connect(:adapter => 'mysql2', :database=>'my_test_db', :user => 'some_user', :password => 'xxxx', :host => 'localhost', :flags => ::Mysql2::Client::MULTI_STATEMENTS)

# res will be a Sequel::Mysql2::Dataset object
res = conn["select * from table_1; select * from table_2;"]

只需执行以下操作,我就可以轻松获得第一个查询的结果(从table_1中选择) res.allres.each{ |r|把 r }

我的问题是,如何获取下一组结果(从 table_2 中选择)?是否有某种方法可以存储/缓存现有结果并继续处理下一个数据集?

尝试再次运行 res.all 会导致错误

Sequel::DatabaseDisconnectError: Mysql2::Error: Commands out of sync; you can't run this command now
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/adapters/mysql2.rb:77:in `query'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/adapters/mysql2.rb:77:in `block in _execute'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/database/logging.rb:33:in `log_yield'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/adapters/mysql2.rb:77:in `_execute'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/adapters/shared/mysql_prepared_statements.rb:34:in `block in execute'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/database/connecting.rb:229:in `block in synchronize'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/connection_pool/threaded.rb:104:in `hold'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/database/connecting.rb:229:in `synchronize'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/adapters/shared/mysql_prepared_statements.rb:34:in `execute'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/dataset/actions.rb:795:in `execute'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/adapters/mysql2.rb:181:in `execute'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/adapters/mysql2.rb:152:in `fetch_rows'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/dataset/actions.rb:143:in `each'
  from /Users/lefthandpisces/.rvm/gems/ruby-1.9.3-p448/gems/sequel-4.6.0/lib/sequel/dataset/actions.rb:46:in `all'
  from (irb):14
  from /Users/lefthandpisces/.rvm/rubies/ruby-1.9.3-p448/bin/irb:12:in `<main>'

谢谢!

最佳答案

您无法使用 mysql2 适配器执行此操作。我相信 mysql 适配器支持它,但即便如此,这也是一个坏主意。使用单独的数据集或带有 UNION 的单个数据集。

关于mysql - 使用 Sequel gem 检索多个数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21127287/

相关文章:

ruby-on-rails - Rails 中使用 form_for 进行纬度/经度坐标插入

mysql - Rails 迁移 : Adding comment to column without changing type

mysql - 使用 Mysql 插入非唯一行时更新字段

php - 学说中的实体多对多(symfony2)

ruby - 确定 Ruby 1.9.3 中的字符编码

mysql - 安装 Mysql2 gem- 10.6 服务器时出错

mysql - 正确的 mysql 列类型可以保存 100k 长度的字符串吗?

MySQL Left Join + Where问题

ruby - 未初始化的常量 Model1::Model2::Model3

Ruby - 从电子邮件地址中查找文本中的名字和姓氏