Django: копировать данные из одной базы данных в другую - PullRequest
4 голосов
/ 03 апреля 2012

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

, например:

У меня есть информация о модели в файле db с именем 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.Информационная таблица не существует ... есть идеи?

Ответы [ 2 ]

6 голосов
/ 03 апреля 2012

Вам нужно изменить 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;
1 голос
/ 03 апреля 2012
  • Файл дампа из old.db содержит поле info_type, которого нет в новой информационной модели. Это приведет к ошибке загрузки данных, которая проверяет все поля, загруженные из файла JSON. Вы можете закомментировать строку info_type перед сбросом из старой модели.
  • Упомянутый Алекс способ Attach проще и лучше, который нуждается в крошечной настройке

    INSERT INTO newdb.Information SELECT * FROM Information;

    обратите внимание на отсутствующие скобки вокруг SELECT, sqlite не принимает их. Ссылки http://sqlite.org/lang_insert.html

  • Если вы выполняете миграцию, пробовали ли вы Юг
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...