2009-07-05 18 views
11

मैं उबंटू 9.04 32 बी चला रहा हूं और सिनैप्टिक्स से डीजेंगो मिला हूं। मेरी सेटिंग्स.py एक sqlite3 डेटाबेस के लिए कॉन्फ़िगर किया गया है।Django शुरुआती समस्या: manage.py dbsync

मैं इस tutorial के माध्यम से किया गया है और निम्न त्रुटि जब आदेश python manage.py syncdb भागने की कोशिश कर मिल गया है:

 
Traceback (most recent call last): 
    File "manage.py", line 11, in 
    execute_manager(settings) 
    File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 340, in execute_manager 
    utility.execute() 
    File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 295, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 192, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 219, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 348, in handle 
    return self.handle_noargs(**options) 
    File "/usr/local/lib/python2.6/dist-packages/django/core/management/commands/syncdb.py", line 51, in handle_noargs 
    cursor = connection.cursor() 
    File "/usr/local/lib/python2.6/dist-packages/django/db/backends/__init__.py", line 56, in cursor 
    cursor = self._cursor(settings) 
    File "/usr/local/lib/python2.6/dist-packages/django/db/backends/sqlite3/base.py", line 145, in _cursor 
    self.connection = Database.connect(**kwargs) 
sqlite3.OperationalError: unable to open database file 

है किसी को भी मेरी समस्या पर एक सुराग नहीं है?

उत्तर

9

एक अनुमति समस्या हो सकती है, क्या आपके उपयोगकर्ता को फ़ोल्डर पर लिखने का पर्याप्त अधिकार है? उदाहरण के लिए यदि आप

sudo python manage.py syncdb 

इसके बजाय, क्या यह काम करता है?

+0

यह बहुत उपयोगी था, धन्यवाद – RejeeshChandran

21

सेटिंग्स.py में आप sqlite फ़ाइल के सापेक्ष पथ का उपयोग कर रहे हैं?

यदि आप हैं, तो इसे पूर्ण पथ में बदलने का प्रयास करें।

यानी बजाय:

~/project/mydata.db 

उपयोग

/home/user/project/mydata.db 
+0

यह मेरी समस्या हल करता है। Thx। –

+2

यह लगभग हमेशा समस्या है। पाइथन इन्हें पढ़ते समय पथ विस्तार नहीं करता है। – MattK

5

गूगल की खातिर:

डेटाबेस के लिए पथ फ़ाइल का पूर्ण पथ --- न सिर्फ होना चाहिए निर्देशिका जहां फ़ाइल रहता है।

+0

क्या यह नहीं है जो JosefAssad ने [उनके उत्तर] (// stackoverflow.com/a/1084782/5420829) में सुझाव दिया था? हास्य –

3

मुझे विंडोज़ पर एक ही समस्या थी, तब एहसास हुआ कि सिंकडीबी निर्दिष्ट फ़ोल्डर नहीं बनाएगी अगर यह पहले से मौजूद नहीं है। मैंने सेटिंग्स में c:/mysite/db/sqlite3.db निर्दिष्ट किया था लेकिन /db/ फ़ोल्डर मौजूद नहीं था। इसे टर्मिनल में बनाया गया और फिर सफलतापूर्वक सिंकडब चलाया।

17

यह भी हो सकता है यदि आपका डेटाबेस नाम आपके प्रोजेक्ट नाम जैसा ही है। इसे ठीक करने के लिए बस अपने डीबी का नाम बदलें। NAME को .db जोड़कर। तो अगर settings.py में अपने डेटाबेस नाम था 'epic_project' यह epic_project.db '


लंबी और उबाऊ स्पष्टीकरण बदलें:

आप चलाकर अपनी परियोजना शुरू करते हैं:

django startproject epic_project 

अपने फ़ोल्डर संरचना इस तरह होगा:

  • /path/करने के लिए/epic_project/
    • manage.py
    • epic_project/
      • settings.py

अपनी सेटिंग में तो अगर।py आप अपने डेटाबेस सेट के रूप में:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': 'epic_project', 
     ... 
    } 
} 

जब

python manage.py syncdb 

रन इसे खोलने या कम से/पथ एक SQLite db फ़ाइल बनाने की कोशिश करता है/to/epic_project/epic_project, लेकिन वहाँ एक निर्देशिका है, तो यह कहता है "ओह ठीक है पथ पहले से मौजूद है, चलो इसे एक स्क्लाइट डीबी के रूप में खोलें", दुर्भाग्यवश एसक्लाइट के लिए यह एक निर्देशिका है, डीबी नहीं, इसलिए यह रोता है और django आपको इन आँसू को "sqlite3" के रूप में प्रस्तुत करता है। ऑपरेशनल एरर: खोलने में असमर्थ डेटाबेस फ़ाइल "

+0

प्लस 1 यह एक नियमित अभिव्यक्ति को दर्शाता है, लेकिन जिस समस्या को आप हल कर रहे हैं वह तथ्य है कि पाइथन को एकल बैकस्लाश पसंद नहीं है। आप 'सी: \\ घर \\ usr \\ mysite \\ sqlite3.db'' – Rel

0

उपयोगकर्ता 104264 से उत्तर के समान - विभिन्न परिप्रेक्ष्य ...

वर्तमान में YouTube tutorial का पालन करना मुझे एक ही त्रुटि थी। वर्चुअल एनवी django प्रोजेक्ट निर्देशिका में manage.py चलाते समय मुझे लगता है ... वर्चुअल एनवी के लिए पथ .../django_project /, /myapp/settings.py के अंदर डेटाबेस नाम बस 'storage.db' था, इसलिए

(Django-V) ... आभासी env परियोजना के लिए पथ .../django_project /> अजगर manage.py syncdb

बनाया ... आभासी env परियोजना के लिए पथ .../django_project/storage.db

-बिल

0

यदि आप डीबी फ़ाइल के लिए एक पूर्ण पथ निर्दिष्ट कर रहे हैं और अभी भी समस्याएं हैं, तो स्ट्रिंग से पहले एक आर डालने का प्रयास करें।

यानी।

r'C:\home\usr\mysite\sqlite3.db' 
+0

के लिए – Tom

+1

@ से बेहतर हो जाएंगे, क्योंकि यह नियमित अभिव्यक्ति को इंगित नहीं करता है। यह पाइथन को * कच्चे स्ट्रिंग शाब्दिक *: http: // stackoverflow के रूप में पेश करने के लिए कहता है।कॉम/ए/2081708/2259303 – agconti

+0

दुह, मेरा बुरा। 99% बार जब मैं इसका उपयोग करता हूं तो Django urls के लिए है, इसलिए मुझे इस तरह से मेरे सिर में फंस गया है। माफ़ कीजिये। – Tom

0

समस्या मैं में चल रहा था जहां कुछ मॉडल लुकअप (किसी भी वर्ग या समारोह के बाहर) आयात पर किया जा रहा था एक बूटस्ट्रैपिंग मुद्दा था। Per the docs, यह एक बुरा विचार है।

2

मुझे दो दिन पहले एक ही समस्या थी। मैंने इसे पूर्ण नाम पर डेटाबेस शब्दकोश (सेटिंग्स.py) में 'NAME' सेट करके हल किया। उदाहरण के लिए ।

settings.py

DATABASES = { 
    'default' : { 
     'ENGINE' : 'django.db.backends.sqlite3', 
     'NAME' : DATABASE_PATH, 
    } 
} 
यहाँ

आप के रूप में settings.py के शीर्ष पर DATABASE_PATH सेट कर सकते हैं इस तरह के (सुनिश्चित नहीं हैं कि अगर यह विंडोज़ के लिए काम करेंगे) Windows के लिए

SETTINGS_DIR = os.path.dirname(__file__) 
PROJECT_PATH = os.path.abspath(os.path.join(SETTINGS_DIR, os.pardir)) 
DATABASE_PATH = os.path.abspath(os.path.join(PROJECT_PATH, 'your-database-name')) 

आपको प्रतिस्थापन विधि का उपयोग करना पड़ सकता है। (यकीन नहीं है .. लेकिन आप इसे निम्न प्रकार से आजमा सकते हैं)

PROJECT_PATH = os.path.abspath(os.path.join(SETTINGS_DIR, os.pardir).replace('\\', '/')) 

समान डेटा DATABASE_PATH के लिए जाता है। पीएस। अगर मैं ग़लत हूं तो मेरी गलती सुझाएं।

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