Select it with the mouse and hit Enter
| на поддержку перевода |
|
|
ЯМ:41001223475816
Однажды я столкнулся с необходимостью переноса и последующей синхронизации некоторого количества словарей из большой базы данных под управлением Oracle в проект, разработанный с помощью Django. Для экспорта данных был написан небольшой скрипт на языке Python, который упаковывал данные таблиц и информацию о структуре таблиц в Pickle объект. Для импорта данных был написан другой скрипт. Чтобы обеспечить его работу с любым типом баз данных, которые поддерживаются Django было принято решение воспользоваться стандартным Django DB API.
Первым делом следует обеспечить установку переменных окружения
перед выполнением скрипта импорта. Переменная
PYTHONPATH должна указывать на каталог
в котором находится каталог нашего проекта, т.е., если
проект располагается в каталоге
~/development/djangobook, то переменная
должна содержать ~/development. Переменная
DJANGO_SETTINGS_MODULE должна указывать на
модуль (файл) с настройками доступа к базе данных, в моём случае
это будет djangobook.settings.
Первым делом в скрипте следует выполнить импортирование моделей:
import django from arm.invite.models import Dictionary, DictionaryType
Дальше всё проще. Предположим, что вы уже загрузили данные в словарь и теперь будете замещать данные в сводной таблице:
for k in dicts.keys():
print "Processing %s...', % k,
c = dicts[k].get('columns')
d = dicts[k].get('data')
# тут проверка данных
try:
index_cod = c.index('COD')
index_text = c.index('TEXT')
except:
print ' failed [wrong structure].'
continue
# получаем объект - словарный тип
try:
t = DictionaryType.objects.get(title=k.lower())
except:
# если не нашли, то что-нибудь делаем
# удаляем старые записи
Dictionary.objects.filter(slvcode=t).delete()
# заливаем новые
for i in dicts[k].get('data'):
try:
r = Dictionary(slvcode=t, code=i[index_cod], text=i[index_text])
r.save()
except:
pass
print ' done.'