2014-01-15 28 views
0

我以儘可能最基本的方式使用了Sequel寶石 - 連接到本地數據庫並提取結果。使用續集寶石檢索多個數據集

一個問題是我的代碼依賴於我能夠一次執行多個查詢語句(將它們分開不是一個選項)。

  • 使用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;"] 

,我可以很輕鬆地通過簡單地做 res.all OR res.each{ |r| puts r }

我的問題是,如何獲取下一組結果得到第一個查詢(從table_1選擇)的結果(選擇來自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>' 

謝謝!

回答

1

你不能用mysql2適配器做到這一點。我相信mysql適配器支持它,但即使如此,這也不是一個好主意。使用單獨的數據集或單個數據集與UNION。

+0

如果我記得你是繼續寶石的創造者,對嗎? a)感謝您對此進行的開發,以及b)未來將採用此功能的計劃? – user2490003

+0

不。根據Sequel API,正確支持基本上是不可能的(如果table_1和table_2有不同的模式?)。 –