存储mysql查询信息

存储mysql查询信息,mysql,database,chef-infra,chef-recipe,Mysql,Database,Chef Infra,Chef Recipe,我正在尝试查询我的mysql数据库。我正在使用数据库食谱,可以建立与数据库的连接。我试图查询数据库中的信息,所以现在的问题是如何存储这些信息,以便在其他资源中访问它们。查询结果存储在哪里?这是我的食谱: mysql_database "Get admin users" do connection mysql_connection_info sql "Select * from #{table_name}" action :query end 提前感谢如果您没有使用Rub

我正在尝试查询我的mysql数据库。我正在使用
数据库
食谱,可以建立与数据库的连接。我试图查询数据库中的信息,所以现在的问题是如何存储这些信息,以便在其他资源中访问它们。查询结果存储在哪里?这是我的食谱:

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

提前感谢

如果您没有使用Ruby的经验,这可能会让您感到困惑。无法从厨师资源“返回”提供者的结果。
mysql\u数据库
是一个
Chef::Recipe
DSL方法,在运行时转换为
Chef::Provider::database::mysql
。此提供商是

如果您花一些时间深入研究该提供程序,您将看到它如何使用。为了获得查询的结果,您需要在配方中创建自己的连接对象并对其执行命令。比如说

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

我发现使用优秀的老厨师::Mixin:ShellOut/shell_out()就足以完成这项工作,而且它与数据库无关(假设您知道您的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的位置告诉您该列是什么)


您想在查询数据时使用哪种资源?@datelligent我想用查询返回的信息更新
etc/group
文件,以便在
文件
resource中使用它。然后您应该使用[PHP file\u put\u contents]()将数据附加到您的文件中。也可以使用fwrite。一般来说,有一些工具可以创建和写入文件,或者打开和更新,然后存储数据。谢谢,我会试试的out@datelligent我最终用ruby来处理它
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