2008-10-08 7 views
7

Je voudrais lancer un script pour remplir ma base de données. Je souhaite y accéder via l'API de base de données Django.Que dois-je importer pour accéder à mes modèles?

Le seul problème est que je ne sais pas ce que j'aurais besoin d'importer pour y accéder.

Comment cela peut-il être réalisé?

Répondre

12

Importez votre module de paramètres trop

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

from mysite.polls.models import Poll, Choice 

devrait faire l'affaire.

0

En plus de vos propres fichiers de modèles, vous devez également importer votre module de paramètres.

5

Si vous utilisez l'argument shell au script manage.py dans votre répertoire de projet, vous ne devez pas importer les paramètres manuellement:

$ 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 * 
>>> 

Pour une utilisation non interactive, vous pouvez mettre en place un custom command et l'exécuter avec manage.py.

+0

À 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. –

6

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() 
+0

+1, en cours d'exécution à la racine de mon projet, la réponse acceptée ci-dessus ne fonctionne pas, mais c'est le cas! – pufferfish

+1

La ligne "sys.exit (1)" ne doit-elle pas être indentée? –

1

La solution la plus propre consiste à ajouter des extensions 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 

La liste des commandes possibles est ensuite étendue avec entre autres la commande runscript.

Questions connexes