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()
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ć. –