gpt4 book ai didi

ruby - 以 CSV 格式导出 SQLite3 表的内容

转载 作者:数据小太阳 更新时间:2023-10-29 08:38:57 24 4
gpt4 key购买 nike

我有一个生成 SQLite3 数据库的 Ruby 脚本。

我希望能够生成包含其中一个数据库表的“output.csv”文件。

有没有办法在 Ruby 中处理它?<​​/p>

最佳答案

使用 Sequel 很容易和 to_csv :

require 'sequel'
DB = Sequel.sqlite
# since Sequel 3.48.0 to_csv is deprecated,
# we must load the to_csv feature via a extension
DB.extension(:sequel_3_dataset_methods) #define to_csv
DB.create_table(:test){
Fixnum :one
Fixnum :two
Fixnum :three
}
#Prepare some test data
5.times{|i|
DB[:test].insert(i,i*2,i*3)
}

File.open('test.csv', 'w'){|f|
f << DB[:test].to_csv
}

结果是:

one, two, three
0, 0, 0
1, 2, 3
2, 4, 6
3, 6, 9
4, 8, 12

在我的测试中,我遇到了行尾问题,所以我需要一个额外的 gsub :

File.open('test.csv', 'w'){|f|
f << DB[:test].to_csv.gsub("\r\n","\n")
}

如果您想要不带标题行的导出,请使用 to_csv(false)

备注:

  • .to_csv自 Sequel 3.48.0 (2013-06-01) 以来已弃用。您可以将旧版本与 gem 'sequel', '< 3.48.0' 一起使用或加载扩展 sequel_3_dataset_methods ).

要获得对其他分隔符和其他 CSV 功能的支持,您可以结合使用 Sequel 和 CSV:

require 'sequel'
require 'csv'
#Build test data
DB = Sequel.sqlite
DB.create_table(:test){
Fixnum :one
Fixnum :two
Fixnum :three
String :four
}
#Prepare some test data
5.times{|i|
DB[:test].insert(i,i*2,i*3, '<a href="www.test.com">test, no %i</a>' % i)
}

#Build csv-file
File.open('test.csv', 'w'){|f|
DB[:test].each{|data|
f << data.values.to_csv(:col_sep=>';')
}
}

结果:

0;0;0;"<a href=""www.test.com"">test, no 0</a>"
1;2;3;"<a href=""www.test.com"">test, no 1</a>"
2;4;6;"<a href=""www.test.com"">test, no 2</a>"
3;6;9;"<a href=""www.test.com"">test, no 3</a>"
4;8;12;"<a href=""www.test.com"">test, no 4</a>"

作为替代方案,您可以修补 Sequel::Dataset(来自 marcalc at Github 的帖子的修改代码):

class Sequel::Dataset
require 'csv'
#
#Options:
#* include_column_titles: true/false. default true
#* Other options are forwarded to CSV.generate
def to_csv(options={})
include_column_titles = options.delete(:include_column_titles){true} #default: true
n = naked
cols = n.columns
csv_string = CSV.generate(options) do |csv|
csv << cols if include_column_titles
n.each{|r| csv << cols.collect{|c| r[c] } }
end
csv_string
end
end

关于ruby - 以 CSV 格式导出 SQLite3 表的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16592661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com