2014-01-22 25 views
2

我想查詢我的mysql數據庫。我正在使用database食譜,並可以與我的數據庫建立連接。我試圖查詢我的數據庫的信息,所以現在的問題是我如何存儲信息,所以我可以在另一個資源中訪問它。查詢結果存儲在哪裏?這是我的食譜:存儲mysql查詢信息廚師

mysql_database "Get admin users" do 
    connection mysql_connection_info 
    sql "Select * from #{table_name}" 
    action :query 
end 

在此先感謝

+0

您想要使用哪個資源查詢數據? – datelligence

+0

@datelligent我想用查詢返回的信息更新'etc/group'文件,所以它將被用在'file'資源中 –

+0

然後你應該使用[PHP file_put_contents](http://php.net/ file_put_contents)將數據追加到您的文件。也可以使用** fwrite **。通常有一些工具可以創建和寫入文件,或打開和更新,然後存儲數據。 – datelligence

回答

5

如果你沒有使用Ruby的經驗,這可能是讓人有些困惑。無法從廚師資源「返回」提供者的結果。 mysql_database是一個Chef::Recipe DSL方法,在運行時將其轉換爲Chef::Provider::Database::Mysql。這名提供者是defined in the cookbook

如果您花一些時間深入該提供程序,則可以使用db object來了解它如何執行查詢。爲了獲得查詢的結果,您需要在配方中創建自己的連接對象並對其執行命令。例如

require 'mysql' 
db = ::Mysql.new('host', 'username', 'password', nil, 'port', 'socket') # varies with setup 

users = db.query('SELECT * FROM users') 

# 
# You might need to manipulate the result into a more manageable data 
# structure by splitting on a carriage return, etc... 
# 
# Assume the new object is an Array where each entry is a username. 
# 

file '/etc/group' do 
    contents users.join("\n") 
end 
+0

感謝使用Ruby幫助我處理它很好 –

0

我發現使用好老廚師::密新:ShellOut/shell_out()相當足夠了這個工作,它的DB無關(假設你知道你的SQL :))。如果你所要查詢的只是一個價值,那麼它的效果特別好;對於多行/列,您將需要解析SQL查詢結果。您需要隱藏結果集中的行數,列標題,前面的空格等,以獲得所需的查詢結果。例如,下面的工作SQL Server上:

單項

so = shell_out!("sqlcmd ... -Q \"set nocount on; select file_name(1)\" -h-1 -W") 
db_logical_name = so.stdout.chop 

多行/列(從0開始的行內的值的位置告訴你這列是什麼)

so = shell_out!("sqlcmd ... -Q \"set nocount on; select * from my_table\" -h-1 -W") 
rows_column_data = so.stdout.chop 
# columns within rows are space separated, so can be easily parsed