Найти - Пользователи
Полная версия: бэкап/перенос данных из БД средствами django/python ( mysql --> pg )
Начало » Django » бэкап/перенос данных из БД средствами django/python ( mysql --> pg )
1
Dr.Livsi
Есть сайт на django. В качестве СУБД используется mysql. Необходимо перенести данные из mysql в postgresql. Пробовал сделать бэкап и затем конвертировать с помощью mysql2pgsql.perl, однако возникли ошибки и сконвертированный файл в pg не затянулся. Возможно, есть какое-то другое решение перенести данные (может через pickle)?
appetito
экспорт/импорт в json?(_)
Dr.Livsi
не, лучше в pickle все таки.
вот пример кода на консервирование:
# -*- coding: utf-8 -*-

import pickle
from site.prilozhenie.models import *

models={Oblast:'oblast.pickle',
Oblast_raion:'oblast_raion.pickle',
City:'city.pickle',District:'district.pickle',
Street:'street.pickle',Flats:'flats.pickle',
PhotoFlats:'photoflats.pickle',Houses:'houses.pickle',
PhotoHouses:'photohouses.pickle'}

def pickle_to():
for model in models.keys():
fl=open(models[model],'wb')
a=model.objects.all()
pickle.dump(a,fl)
fl.close
Получаем законсервированные экземпляры объектов. Каждый - в отдельном файле.
А вот как расконсервировать?
def pickle_from():
for model in models.keys():
fl=open(models[model],'rb')
from_pickled=pickle.load(fl)
model.objects.all().delete() #перед внесением свежих данных в новую бд удаляем из нее все старые данные
for row in from_pickled:
model.objects.create(field1=from_pickled.field1,
field2=from_pickled.field2,
field3=from_pickled.field3,
field4=from_pickled.field4)
Проблема вот в этом куске:
            model.objects.create(field1=from_pickled.field1,
field2=from_pickled.field2,
field3=from_pickled.field3,
field4=from_pickled.field4)
Ведь в каждой модели свои поля. Я могу получить перечень полей с помощью model.__doc__. Но мне получается в параметры objects.create() надо каким-то образом завернуть наименования полей, имеющихся в данной модели и значения этих полей из законсервированного объекта “from_pickled”. Цикл тут не вставишь. Какие могут быть еще варианты?
appetito
может всё-таки лучше в json?(ДОКА)
Dr.Livsi
Большое спасибо. Все получилось.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB