Django: Как я могу использовать классы модели для взаимодействия с моей базой данных извне Django?

Я хотел бы написать script, который взаимодействует с моей БД, используя модель приложения Django. Тем не менее, я хотел бы иметь возможность запускать этот script из командной строки или через cron. Что мне нужно импортировать, чтобы это разрешить?

Ответы

Ответ 1

Вам нужно настроить переменные среды Django. Они сообщают Python, где находится ваш проект, и каково имя модуля настроек (имя проекта в модуле настроек необязательно):

import os

os.environ['PYTHONPATH'] = '/path/to/myproject'
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'

Теперь вы должны иметь доступ к моделям:

from myproject.models import MyModel

all_my_models = MyModel.objects.all()

Ответ 2

Предпочтительным способом должно быть добавление пользовательской команды, а затем запустить его как любой другой django-admin (не путать с django.contrib.admin):

./manage.py mycustomcommand --customarg

Настройка DJANGO_SETTINGS_MODULE должна использоваться только тогда, когда пользовательская команда невозможна.

Ответ 3

В зависимости от ваших конкретных потребностей django-command-extensions может сэкономить вам немного времени. Для запуска любого script as-is без беспорядка с переменными окружения просто введите:

./manage.py runscript path/to/my/script.py

django-command-extensions также имеет команды для автоматизации скриптов как заданий cron, о чем вы упомянули, что вы хотели бы сделать.

Если вы больше похожи на людей с орехами и болтами, вы можете проверить это очень подробное сообщение, в котором излагаются, как сделать "автономный" django скрипты, которые будут выполняться из заданий cron и whatnot.