2008-10-08 9 views

Odpowiedz

12

Importowanie modułu ustawienia zbyt

import os 
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" 

from mysite.polls.models import Poll, Choice 

powinno załatwić sprawę.

0

Oprócz własnych plików modeli, należy również zaimportować moduł ustawień.

5

Jeśli używasz shell argument skryptu manage.py w katalogu projektu, nie trzeba ręcznie zaimportować ustawienia:

$ cd mysite/ 
$ ./manage.py shell 
Python 2.5.2 (r252:60911, Jun 10 2008, 10:35:34) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from myapp.models import * 
>>> 

Dla nieinterakcyjnym użytku można wdrożyć i uruchomić go custom command z manage.py.

+0

O ile czegoś mi nie brakuje, manage.py nie ma podkomendy recordscript w Django 1.0. Jeśli używasz niestandardowej aplikacji do zapewnienia tej funkcjonalności, powinieneś o tym wspomnieć. –

6

To jest to, co mam na górze jednego z moich skryptów ładowania danych.

import string 
import sys 
try: 
    import settings # Assumed to be in the same directory. 
    #settings.DISABLE_TRANSACTION_MANAGEMENT = True 
except ImportError: 
    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) 
sys.exit(1) 

#Setup the django environment with the settings module. 
import django 
import django.core.management 
django.core.management.setup_environ(settings) 

from django.db import transaction 

Wszystko powinno się wykonać, zanim zrobisz coś więcej w swoim skrypcie.

Inną metodą jest użycie urządzeń i manage.py. Jednak jeśli próbujesz po prostu ładować dane masowo, aby zainicjować bazę danych, powinno to działać poprawnie.

Również w zależności od tego, co robisz, możesz lub nie chcesz zrobić tego wszystkiego w jednej transakcji. Odkomentuj powyższą linię transakcji i utwórz strukturę kodu podobną do tej.

transaction.enter_transaction_management() 
try: 
    #Do some stuff 
    transaction.commit() 
finally: 
    transaction.rollback() 
    pass 
transaction.leave_transaction_management() 
+0

+1, działając w katalogu głównym mojego projektu, powyższa zaakceptowana odpowiedź nie działa, ale Twoja jest! – pufferfish

+1

Czy nie powinien być wcięty wiersz "sys.exit (1)"? –

1

Najczystszym rozwiązaniem jest dodanie rozszerzeń django.

 
(virt1)[email protected]:~/Documents/prive/rugby-club/proposal/kitu$ yolk -l 
Django   - 1.3.1  - active 
Pygments  - 1.4   - active 
Python   - 2.6.5  - active development (/usr/lib/python2.6/lib-dynload) 
django-extensions - 0.7.1  - active 
pip    - 1.0.2  - active 
setuptools  - 0.6c11  - active 
wsgiref   - 0.1.2  - active development (/usr/lib/python2.6) 
yolk   - 0.4.1  - active 

Lista możliwych poleceń jest następnie rozszerzana między innymi o polecenie runscript.

Powiązane problemy