2008-10-08 15 views
7

मैं अपने डेटाबेस को पॉप्युलेट करने के लिए एक स्क्रिप्ट चलाने के लिए चाहता हूं। मैं Django डेटाबेस एपीआई के माध्यम से इसे एक्सेस करना चाहता हूं।मेरे मॉडल तक पहुंच प्राप्त करने के लिए मुझे आयात करने की क्या ज़रूरत है?

एकमात्र समस्या यह है कि मुझे नहीं पता कि मुझे इस तक पहुंच प्राप्त करने के लिए आयात करने की आवश्यकता होगी।

यह कैसे प्राप्त किया जा सकता है?

उत्तर

12

अपनी सेटिंग्स मॉड्यूल आयात भी

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

from mysite.polls.models import Poll, Choice 

चाल करना चाहिए।

0

अपनी खुद की मॉडल फ़ाइलों के अतिरिक्त, आपको अपनी सेटिंग्स मॉड्यूल भी आयात करने की आवश्यकता है।

5

आप अपने प्रोजेक्ट निर्देशिका में manage.py स्क्रिप्ट के shell तर्क का उपयोग करते हैं, तो आप मैन्युअल सेटिंग्स आयात की जरूरत नहीं है:

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

गैर-सहभागी उपयोग के लिए आप एक custom command को लागू करने और इसे चलाने सकता है manage.py के साथ।

+0

जब तक मुझे कुछ याद नहीं आ रहा है, तो प्रबंधन के पास Django 1.0 में एक रनस्क्रिप्ट सबकॉमैंड नहीं है। यदि आप इस कार्यक्षमता को प्रदान करने के लिए कस्टम ऐप का उपयोग कर रहे हैं तो आपको इसका उल्लेख करना चाहिए। –

6

यह मेरे डेटा लोडिंग स्क्रिप्ट के शीर्ष पर है।

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 

यह आपकी स्क्रिप्ट में और कुछ करने से पहले निष्पादित होना चाहिए।

एक और तरीका फिक्स्चर और manage.py का उपयोग करना है। यद्यपि यदि आप डेटाबेस को प्रारंभ करने के लिए थोक डेटा लोड को पूरा करने की कोशिश कर रहे हैं, तो यह ठीक काम करना चाहिए।

इसके अलावा आप जो भी कर रहे हैं उसके आधार पर आप इसे एक लेनदेन में कर सकते हैं या नहीं कर सकते हैं। उपरोक्त लेनदेन लाइन को अनदेखा करें और इसके समान कोड बनाएं।

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

+1, मेरे प्रोजेक्ट की जड़ में चलते समय, उपरोक्त स्वीकृत उत्तर काम नहीं करता है, लेकिन आपका करता है! – pufferfish

+1

लाइन "sys.exit (1)" को इंडेंट नहीं किया जाना चाहिए? –

1

सबसे अच्छा समाधान 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 

संभव कमांड की सूची तो runscript आदेश अन्य बातों के अलावा के साथ बढ़ाया है।

संबंधित मुद्दे