2012-04-02 4 views
2

У меня есть два файла sqlite.db. Я хотел бы скопировать содержимое одного столбца в таблицу файла db на другую.Django: копировать данные из одной базы данных в другую

, например:

У меня есть информация о модели в БД файл с именем new.db:

class Information(models.Model): 
     info_id = models.AutoField(primary_key = True) 
     info_name = models.CharField(max_length = 50) 

и следующую информационную модель в БД файл с именем old.db:

class Information(models.Model): 
      info_id = models.AutoField(primary_key = True) 
      info_type = models.CharField(max_length = 50) 
      info_name = models.CharField(max_length = 50) 

Я хотел бы скопировать все данные в столбце info_id и info_name из old.db в info_id и info_name в new.db.

Я думал что-то вроде:

manage.py dbshell 

затем

INSERT INTO "new.Information" ("info_id", "info_name") 
SELECT "info_id", "info_name" 
FROM "old.Information"; 

Это, кажется, не работает. Он говорит new.Information таблицы не существует ... любые идеи?

ответ

5

Вам необходимо переключить URL-адрес базы данных в файл настроек на db2 и запустить syncdb для создания новых таблиц. После этого проще всего сделать imo, чтобы переключиться обратно на db1 и запустить ./manage.py dumpdata myapp > data.json, а затем другой переключатель на db2, где вы можете запустить ./manage.py loaddata data.json.

Впоследствии вы можете удалить данные, которые вам не нужны, из db2.

Редактировать: Еще один подход заключается в использовании функции ATTACH из sqlite. Во-первых, я рекомендую вам сделать первый шаг выше (настройки базы данных изменений и использование SyncDB для создания таблиц), то вы можете переключиться обратно и сделать это:

./manage.py dbshell 

> ATTACH DATABASE 'new.db' AS newdb; 
> INSERT INTO newdb.Information SELECT * FROM Information; 
+0

интересно .. позвольте мне дать, что попробовать и получить обратно к вам! :) – JohnnyCash

+0

ValueError: объект JSON не может быть декодирован .... идеи? – JohnnyCash

+0

На демпинге? У вас есть данные в модели? Возможно, попробуйте использовать второй подход, который я добавил после вашего первого комментария. –

1
  • сброшенный файл из old.db содержит Тип_информации которое не находится в новой информационной модели. Это приведет к сбою loaddata, который проверяет все поля, загруженные из файла JSON. Вы можете прокомментировать строку info_type перед дампом старой модели.
  • Вложить путь упомянутого Алексом проще и большой, который нуждается в крошечный твике

    INSERT INTO newdb.Information SELECT * FROM Information;

    примечания недостающих скобок вокруг SELECT, SQLite не принимает их. Refs http://sqlite.org/lang_insert.html

  • Если вы выполняете миграцию, вы пробовали South
+0

Спасибо за подсказку с парсером. Я написал запрос, посмотрев грамматику INSERT на веб-сайте SQLite и не заметил (отсутствие) parens. –

Смежные вопросы