我正在运行一个导入脚本,该脚本使用DataMapper将数据库的CSV转储导入到本地sqlite数据库中。
我的模特看起来像这样:
class Staff
include DataMapper::Resource
property :staff_id, String, :key => true
property :full_name, String
end
class Project
include DataMapper::Resource
property :project_id, Integer, :key => true
property :title, String
property :status, String
belongs_to :staff
end
CSV包含主键,所以当我进行导入时,我正在使用它作为键。下次我运行导入时清除表格然后重新开始,但是数据管理器会因为已经使用了主键而呻吟。
有没有办法阻止数据映射器对此抱怨?或者我应该删除.db文件并在导入运行之前重新创建一个空的.db文件?如果是这样,最简单的方法是什么。
答案 0 :(得分:2)
您可以使用DataMapper.auto_migrate!
来清除表格,然后重新创建与当前模型状态匹配的表格。新表将没有先前运行的任何数据。
因此,在定义模型之后,在开始导入数据之前,请执行以下操作:
DataMapper.finalize.auto_migrate!
答案 1 :(得分:0)
如果您从导入创建完整的数据库,我真的建议完全修改数据库,以避免早期运行中的任何溢出。这也使您的build-db代码路径得到充分测试。