将大型数据库表导出为csv文件时,流到ruby中的文件
我使用一个小ruby脚本和mysql2 gem从mysql数据库导出以下内容将大型数据库表导出为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
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解决方案,但不幸的是,我远程工作到服务器,没有直接访问权限,只有登录解决方案,但不幸的是,我远程工作到服务器,没有直接访问权限,只有登录权限