当我将项目转移到生产环境时,我有几个表需要填充,每个表都有几千行。我现在将数据存储在 CSV 文件中,但使用 seed.rb 文件似乎很麻烦,因为我的 CSV 文件中的数据必须格式化以满足 seed.rb 格式。如果这只是少数几行,就不会出现这样的问题。加载此数据的最佳/最简单方法是什么?
5 回答
我可能会使用一些自定义脚本和faster_csv gem,它有很好的工具来快速解析 .csv 文件。然后,您可以将字段映射到模型属性。
我将通过 TDD 作为模型方法来实现它,并使用 ActiveRecords 的 create 方法来实例化实例。虽然这比直接编写 SQL 慢,但它更安全,因为您的数据将通过所有模型验证,并且您对数据完整性更有信心。
预先从遗留数据导入中清除数据完整性问题将为您以后节省很多麻烦。
如果我使用 MySQL 执行此操作,我会使用 MySQL 的加载数据函数,例如
加载数据 infile '/my/rails/project/data.csv' 替换到表 table_name 由 ' field_terminator ' 终止的字段 由 ' line_terminator ' 终止的行;
如果表的设计不经常更改,您可以将这样的语句放入 perl、ruby 或 shell 脚本中。
就像其他人提到的那样,许多数据库都支持批量加载。但是,如果您正在寻找 Rails 风格的解决方案;ar-extensions 有批量插入
您也可以结帐 ActiveWarehouse
fast_seeder gem 会帮助你。它使用多个插入从 CSV 文件填充数据库并支持不同的数据库适配器
由于大多数答案都已过时,此 gem 将为您提供帮助:https ://github.com/zdennis/activerecord-import 。
例如,如果您有一系列书籍,您可以使用:
Book.import(books)
它将只执行一条 SQL 语句。
宝石也适用于关联。