ruby-on-rails - 使用 Ruby on Rails 将许多 CSV 文件导入 PostgreSQL 数据库
问题描述
我正在尝试将一大堆 csv 文件导入到 postgreSQL 数据库中。CSV 文件的格式如下所示。我希望能够在 html 文件之间交换并显示每个县的不同统计数据(表格)。
County,Number,Statistic,Year,Source,
Atlantic;403;Assualt;2010;https://www.njsp.org/ucr/uniform-crime-reports.shtml
Bergen;529;
Burlington;267;
Camden;859;
Cape May;160;
Cumberland;300;
Essex;1275;
Glouchester;209;
Hudson;838;
Hunterdon;38;
Mercer;416;
Middlesex;519;
Monmouth;442;
Morris;202;
Ocean;322;
Passaic;852;
Salem;67;
Somerset;73;
Sussex;53;
Union;421;
Warren;453;
有一堆 csv 文件,其中我跟踪的统计数据不同,即攻击、盗窃等。有没有办法导入所有这些 csv 文件并在执行此操作时创建一个表?还是在 schema.rb 文件中创建一个表,然后在 seed.rb 文件中运行某种脚本会更好?
解决方案
当可以使用 Rails ORM 时,Rails 约定建议不要编写原始 sql -ActiveRecord
通常在 Rails 中,您应该创建迁移,在其中定义表结构并定义名称与表匹配的 ActiveRecord 模型,例如CountyStat
class CreateCountyStats < ActiveRecord::Migration[5.0]
def change
create_table :county_stats do |t|
t.string :county, index: true
t.integer :number
t.string :statistic
t.text :source
t.timestamps
end
end
end
然后你需要解析给定的 CSV,并导入数据库。
seeds.rb
主要使用一次,在初始应用程序设置期间,您可以将其包装在rake task中。
CSV.foreach(csv_path, headers: true) do |row|
attributes = row.to_h.transform_keys(&:downcase)
CountyStat.create(attributes)
end
之后,您可以使用 ActiveRecord 模型获取数据。如果您需要按某个列搜索,您可以添加索引(我已经为县提供了),您也可以为您的县定义范围(如果需要)
class CountyStat
scope :bergen, -> { where(county: "Bergen" }
end
推荐阅读
- php - Laravel 控制器充当代理
- compilation - Samba 4.9.1 密码与 CentOS7 root 密码同步
- oracle - 第一行 VS 下一行 VS rownum
- javascript - 如果相机在 instascan 中打开,输入类型不起作用
- javascript - 使用 Lodash 根据另一个对象的真实状态获取对象的值
- azure - CORS 异常:无法加载 https://login.microsoftonline.com/{TENANT_ID}/oauth2/authorize
- sql - 将数据类型 varchar 转换为日期时将 int 年份转换为字符串时出错
- sql - 如何根据日期的特定条件创建数据集?
- html - 表单重置后IE11不重新验证表单
- java - 杰克逊:反序列化地图
其中键具有自定义嵌套 Pojo 的索引