2010-06-15 1 views
3

Я запускаю скрипт импорта, который импортирует дамп CSV базы данных в локальную базу данных sqlite с использованием DataMapper.Первичный ключ импорта DataMapper

Мои модели выглядят следующим образом:

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-содержит первичный ключ, когда я сделать импорт, я использую, что, как это ключ. В следующий раз, когда я запустил импорт, я очищаю таблицы и начинаю заново, однако datamapper стонет, потому что первичные ключи уже сделаны.

Есть ли способ остановить datamapper стонать об этом или я должен просто удалить .db-файл и заново создать пустой .db-файл непосредственно перед запуском импорта? Если да, то какой самый простой способ сделать это.

ответ

2

Вы можете использовать DataMapper.auto_migrate!, чтобы сдуть таблицы, а затем воссоздать их, соответствующие текущему состоянию модели. Новые таблицы будут пустыми из данных предыдущих прогонов.

Так что после того, как вы определили свои модели, но перед тем, как начать импорт данных сделать что-то вроде следующего:

DataMapper.finalize.auto_migrate! 
+0

Блестящий, это именно то, что мне нужно. Благодаря! – Tom

0

Если вы создаете полную базу данных из импорта, я бы порекомендовал полностью уничтожить базу данных, чтобы избежать переполнения предыдущих версий. Это также хорошо проверит ваш код кода build-db.

+0

Да он полностью создан из экспорта CSV, я не буду писать ему вообще , Так что я должен просто удалить файл и создать его заново каждый раз? если да, то каков наилучший способ сделать это в Ruby? – Tom