Voici ce que j'ai en tête d'un de mes scripts de chargement de données.
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
Tout devrait s'exécuter avant de faire beaucoup d'autres choses dans votre script.
Une autre méthode consiste à utiliser fixtures et manage.py. Cependant, si vous essayez simplement d'effectuer une charge de données en masse pour initialiser une base de données, cela devrait fonctionner correctement. En fonction de ce que vous faites, vous pouvez ou ne voulez pas tout faire en une seule fois. Décommentez la ligne de transaction ci-dessus et structurez votre code de la même manière.
transaction.enter_transaction_management()
try:
#Do some stuff
transaction.commit()
finally:
transaction.rollback()
pass
transaction.leave_transaction_management()
À moins de manquer quelque chose, manage.py n'a pas de sous-commande runscript dans Django 1.0 Si vous utilisez une application personnalisée pour fournir cette fonctionnalité, vous devez le mentionner. –