将大型数据库表导出为csv文件时,流到ruby中的文件

将大型数据库表导出为csv文件时,流到ruby中的文件,ruby,csv,file-io,mysql2,Ruby,Csv,File Io,Mysql2,我使用一个小ruby脚本和mysql2 gem从mysql数据库导出以下内容 require 'csv' require 'mysql2' begin db = Mysql2::Client.new( :host => ".", :username => "xyz", :password => 'xyz', :database => 'xyz') results = db.query 'select * from mytable' CSV.o

我使用一个小ruby脚本和mysql2 gem从mysql数据库导出以下内容

require 'csv'
require 'mysql2'

begin
    db = Mysql2::Client.new( :host => ".", :username => "xyz", :password => 'xyz', :database => 'xyz')

    results = db.query 'select * from mytable'

    CSV.open("C:/tmp/mytable.csv", "w") do |csv|
        csv << results.fields

        results.each do |row|
            csv << row.values
        end
    end
end

我发现了,如果有效的话,我会报告的

result = client.query("SELECT * FROM really_big_Table", :stream => true)

这可能不是您正在寻找的Ruby解决方案,但它是一个解决方案:

MySQL支持直接输出到CSV文件。在您的情况下,如果您只需要一个CSV转储,那么最有效的方法可能是运行如下查询:

SELECT * FROM mytable
  INTO OUTFILE 'C:\\tmp\\mytable.csv'
  FIELDS TERMINATED BY ','
  ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
如果MySQL服务器与输出文件位于同一台计算机上,则此操作有效,因为写入文件的将是服务器,而不是客户端


这可能不是您正在寻找的Ruby解决方案,但它是一种解决方案:

MySQL支持直接输出到CSV文件。在您的情况下,如果您只需要一个CSV转储,那么最有效的方法可能是运行如下查询:

SELECT * FROM mytable
  INTO OUTFILE 'C:\\tmp\\mytable.csv'
  FIELDS TERMINATED BY ','
  ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
如果MySQL服务器与输出文件位于同一台计算机上,则此操作有效,因为写入文件的将是服务器,而不是客户端


答案确实是这样,问题是读取数据库表

results = db.query( 'select * from mytable',  :stream => true, :cache_rows => false )

csv的写入是异步完成的

答案确实是这样的,问题是读取数据库表

results = db.query( 'select * from mytable',  :stream => true, :cache_rows => false )

csv的写入是异步完成的

是从数据库读取的问题,还是写入csv文件的问题,还是两者都有?好问题,我早上再查一下是从数据库读取的问题,还是写入csv文件的问题,还是两者都有?好问题,我将签入morningNice解决方案,但不幸的是,我远程工作到服务器,没有直接访问权限,只有登录解决方案,但不幸的是,我远程工作到服务器,没有直接访问权限,只有登录权限