Atma
Atma

Reputation: 29767

how to run a django python file from command line

I have a simple python file that I eventually want to run from chron.

It looks like this:

from customers.models import Customer, NotificationLogEntry


def hello():
    customers =  Customer.objects.all()
    for c in customers:
        log_entry = NotificationLogEntry(
                                          customer=c,
                                          sent=True,
                                          notification_type=0,
                                          notification_media_type=0,
                                          )
        log_entry.save()


if __name__ == '__main__':
    hello()

When I run this with:

python notifications.py

I get an import error:

Traceback (most recent call last):
  File "notifications.py", line 1, in <module>
    from customers.models import Customer, NotificationLogEntry
ImportError: No module named customers.models

This module exists and I call it without any problem within my django app. Why am I getting this error outside of my app?

Upvotes: 6

Views: 8428

Answers (3)

Tr&#233;mus
Tr&#233;mus

Reputation: 250

Here's super simple option if you're running cron jobs:

cat run.py | ./manage.py shell

Upvotes: 6

levi
levi

Reputation: 22697

you need to set up project path

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")

# your imports, e.g. Django models
from customers.models import Customer, NotificationLogEntry

Upvotes: 3

James Lin
James Lin

Reputation: 26538

You can create a custom command

https://docs.djangoproject.com/en/dev/howto/custom-management-commands/

Or, run ./manage.py shell then import your file

Or, load the django settings

http://www.b-list.org/weblog/2007/sep/22/standalone-django-scripts/

Upvotes: 10

Related Questions