2012-04-07 53 views
25

Tôi vừa cài đặt dự án Django của mình trên một hệ thống mới và cài đặt Django 1.4. Tuy nhiên khi tôi cố gắng chạy manage.py runserver hoặc manage.py syncdb tôi nhận được lỗi này từ Nam:Nam + Django 1.4 Lỗi cơ sở dữ liệu

Validating models... 

Unhandled exception in thread started by <bound method Command.inner_run of <django.contrib.staticfiles.management.commands.runserver.Command object at 0x1a67810>> 
Traceback (most recent call last): 
    File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 91, in inner_run 
    self.validate(display_num_errors=True) 
    File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/core/management/base.py", line 266, in validate 
    num_errors = get_validation_errors(s, app) 
    File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/core/management/validation.py", line 30, in get_validation_errors 
    for (app_name, error) in get_app_errors().items(): 
    File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/db/models/loading.py", line 158, in get_app_errors 
    self._populate() 
    File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/db/models/loading.py", line 64, in _populate 
    self.load_app(app_name, True) 
    File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/db/models/loading.py", line 88, in load_app 
    models = import_module('.models', app_name) 
    File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module 
    __import__(name) 
    File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/south/models.py", line 2, in <module> 
    from south.db import DEFAULT_DB_ALIAS 
    File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/south/db/__init__.py", line 78, in <module> 
    db = dbs[DEFAULT_DB_ALIAS] 
KeyError: 'default' 

Tôi đang sử dụng SQLite hiện. Tôi nghĩ rằng nó có thể là vì điều này change với Django 1.4, tuy nhiên người dùng khác dường như không có vấn đề của tôi. Tất cả các gói của tôi đều được cập nhật.

Trả lời

20

Bạn không có chính xác DATABASES trong số settings của mình. Nên có một cơ sở dữ liệu có tên là 'default'

+0

Cảm ơn bạn, tôi quên rằng tôi đã kiểm tra tên máy của tôi để sử dụng cài đặt cục bộ, và tên máy của tôi đã thay đổi với hệ thống mới của tôi, để cơ sở dữ liệu của tôi không được thiết lập. –

+1

Tôi nhận được lỗi tương tự. Bạn có thể xây dựng giải pháp. Cảm ơn @ saul.shanabrook –

+2

Hãy làm theo các liên kết được cung cấp, có một ví dụ làm việc tối thiểu trong tài liệu – ilvar

39

Tôi có cùng thông báo lỗi nhưng với một nguyên nhân và giải pháp khác so với câu trả lời được chấp nhận. Câu trả lời ngắn gọn là thêm SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'} vào settings.py.

Dưới đây là toàn bộ giải thích:

Tracing để south/db/__init__.py cho thấy rằng không có cơ sở dữ liệu đã được phát hiện, lý do là cơ sở dữ liệu tên công cụ của tôi không có trong danh sách mã hóa cứng trong south/db/__init__.py

engine_modules = { 
    'django.db.backends.postgresql_psycopg2': 'postgresql_psycopg2', 
    'django.db.backends.sqlite3': 'sqlite3', 
    'django.db.backends.mysql': 'mysql', 
    'django.db.backends.oracle': 'oracle', 
    'sql_server.pyodbc': 'sql_server.pyodbc', #django-pyodbc 
    'sqlserver_ado': 'sql_server.pyodbc', #django-mssql 
    'firebird': 'firebird', #django-firebird 
    'django.contrib.gis.db.backends.postgis': 'postgresql_psycopg2', 
    'django.contrib.gis.db.backends.spatialite': 'sqlite3', 
    'django.contrib.gis.db.backends.mysql': 'mysql', 
    'django.contrib.gis.db.backends.oracle': 'oracle', 
    'doj.backends.zxjdbc.postgresql': 'postgresql_psycopg2', #django-jython 
    'doj.backends.zxjdbc.mysql': 'mysql', #django-jython 
    'doj.backends.zxjdbc.oracle': 'oracle', #django-jython 
} 

tôi sử dụng PostGIS 2.0 trên Windows và một thời gian trước đã phải áp dụng một miếng vá nhỏ để phụ trợ postgis của django. Bởi vì tôi đã không cài đặt django từ nguồn, tôi đã tạo một bản sao của chương trình phụ trợ và áp dụng bản vá theo cách thủ công cho bản sao đó. Vì vậy, chương trình phụ trợ mới ở một vị trí khác và vị trí đó không nằm trong danh sách các phím ở phía Nam của engine_modules được hiển thị ở trên.

May mắn thay, South cung cấp biến cài đặt được gọi là SOUTH_DATABASE_ADAPTERS cho South biết trực tiếp công cụ cơ sở dữ liệu thực tế của mỗi bí danh. Tôi đã có thể chạy syncdb sau khi chèn dòng này vào settings.py

SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'}

+0

Điều này làm việc cho tôi! –

+8

Làm việc cho tôi, trong trường hợp của tôi, tôi có ''ENGINE': 'mysql.connector.django'' trong' DATABASES' và 'SOUTH_DATABASE_ADAPTERS = {' mặc định ':' south.db.mysql '}' cho miền Nam. MySQL 5.6 –

+0

Điều này làm việc cho tôi. –

4

Đối với những người sử dụng Heroku, đó là trường hợp của tôi. Tôi cũng thấy vấn đề này, tôi có bộ cơ sở dữ liệu mặc định, như họ chỉ ra trong hướng dẫn heroku:

DATABASES['default'] = dj_database_url.config() 

Tuy nhiên, lỗi mặc định của ketError 'vẫn xuất hiện. Điều này là do không có cơ sở dữ liệu được cung cấp, và do đó dj_database_url không thể tìm thấy nó và nêu ra lỗi khó hiểu đó.

Để giải quyết nó chỉ cung cấp cơ sở dữ liệu và thúc đẩy nó như được giải thích trong heroku postgresql

heroku addons:add heroku-postgresql:dev 
heroku pg:promote HEROKU_POSTGRESQL_BLUE 
Các vấn đề liên quan