Found misprint?

Select it with the mouse and hit Enter

Ctrl-Enter
Processed:
56 1 199 25
на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!

ЯМ:41001223475816

Редактор ресурсов Gettext для Android
The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!
We are glad to hear your questions, comments or suggestions!
(Open in new tab)
Users number: 762
Русская группа
на Google

Доступ к моделям из стороннего скрипта

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