2010-02-01 39 views
53

Tôi có một cơ sở dữ liệu tốt đẹp mà tôi đã tạo ở Django và tôi muốn giao tiếp với một số mã python bên ngoài nội dung trang web của tôi, vì vậy tôi rất tò mò nếu có thể sử dụng API cơ sở dữ liệu Django bên ngoài của một trang web Django, và nếu như vậy không ai có bất kỳ thông tin về cách nó có thể được thực hiện? Google đã không mang lại nhiều lượt truy cập cho điều này.Sử dụng lớp cơ sở dữ liệu Django bên ngoài Django?

Trả lời

53

Bạn chỉ cần định cấu hình cài đặt Django trước khi thực hiện bất kỳ cuộc gọi nào, kể cả nhập mô hình của bạn. Một cái gì đó như thế này:

from django.conf import settings 
settings.configure(
    DATABASE_ENGINE = 'postgresql_psycopg2', 
    DATABASE_NAME = 'db_name', 
    DATABASE_USER = 'db_user', 
    DATABASE_PASSWORD = 'db_pass', 
    DATABASE_HOST = 'localhost', 
    DATABASE_PORT = '5432', 
    TIME_ZONE = 'America/New_York', 
) 

Một lần nữa, hãy chắc chắn để chạy mã mà trước khi chạy, ví dụ .:

from your_app.models import * 

Sau đó chỉ cần sử dụng API DB như bình thường.

+2

xuất sắc nhất, chính xác những gì tôi đang tìm kiếm! –

+0

Tôi có một đầu nối (gói) để kết nối với cơ sở dữ liệu Hive và tôi có thể nhập nó vào chương trình python và tìm nạp dữ liệu từ cơ sở dữ liệu Hive. Tôi đặt trình kết nối đó ở đâu, tức là, tôi đặt thư mục nào và tôi đặt tên cho DATABASE_ENGINE là gì? Cảm ơn trước. –

+0

Chúng tôi cần thêm libs nào vào requirements.txt để có được điều này? –

2

Đối với sử dụng Django ORM từ các ứng dụng khác mà bạn cần:

1) export DJANGO_SETTINGS_MODULE=dproj.settings

2) Thêm thư mục ứng dụng Django của bạn vào đường dẫn (bạn có thể làm điều đó trong mã của phi django-ứng dụng của bạn):

sys.path = sys.path + ['/path/to/your/app/'] 

3) Nếu sử dụng SQLite, sử dụng đường dẫn đầy đủ đến file db trong settings.py:

DATABASE_NAME = '/path/to/your/app/base.db' 
+0

Là một thay thế hacky để thiết lập biến môi trường đúng cách, bạn có thể đặt os.environ ['DJANGO_SETTINGS_MODULE'] = dproj.settings ở trên cùng trước khi nhập các mô-đun ứng dụng của bạn . Điều đó chỉ thay đổi DJANGO_SETTINGS_MODULE trong suốt quá trình đó. – twneale

+0

Đây là một cách tiếp cận rất tốt, không sao chép các cài đặt như trái ngược với câu trả lời được chấp nhận. Ngoài ra, nếu cài đặt Django đã chứa đường dẫn tuyệt đối vào tệp SQLite, đó là trường hợp ** với phiên bản Django hiện tại **, thì ** bước 3 không bắt buộc nữa **. Làm cho nó trở thành giải pháp nhỏ gọn nhất. –

12

Cập nhật setup_environ là phải được loại bỏ trong django 1,6

Nếu bạn có thể nhập khẩu tập tin settings.py của bạn, sau đó take a look tại lệnh setup_environ tiện dụng.

from django.core.management import setup_environ 
from mysite import settings 

setup_environ(settings) 

#here you can do everything you could in your project 
+2

Không được chấp nhận! setup_environ, Tôi sẽ nhớ các bạn –

+0

Rất tiếc, cảm ơn bạn đã cập nhật –

+0

Xem câu hỏi tiếp theo của tôi cho các lựa chọn thay thế: http://stackoverflow.com/questions/15048963/alternative-to-the-deprecated-setup-environ-for-one -off-django-scripts –

6

Tùy chọn cuối cùng mà không ai đề cập đến: custom ./manage.py subcommand.

+1

Tôi sẽ nói rằng đây là cách chính xác để làm điều đó, theo ý kiến ​​của tôi. –

+0

Cập nhật liên kết tới tài liệu: https://docs.djangoproject.com/en/dev/howto/custom-management-commands/ – Gary

+0

@ThibaultJ Tôi chia sẻ ý kiến ​​của bạn. Rất tốt. – pt12lol

3

Đối với django 1.5 trên (nhiều cơ sở dữ liệu được hỗ trợ), cài đặt DATABASE cũng thay đổi. Bạn cần điều chỉnh câu trả lời trước cho ...

settings.configure(
    DATABASES = { 'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'db_name', 
     'USER': 'db_usr', 
     'PASSWORD': 'db_pass', 
     'HOST': '', 
     'PORT': '', 
     }, }, 
    TIME_ZONE = 'Europe/Luxembourg' 
) 
12

Đối với django 1.7, tôi đã sử dụng các bước sau để bắt đầu và chạy.

settings.py:

from django.conf import settings 
settings.configure(
    DATABASES={ 
     'default': { 
      'ENGINE': 'django.db.backends.postgresql_psycopg2', 
      'NAME': 'name', 
      'USER': 'usr', 
      'PASSWORD': 'secret', 
      'HOST': '127.0.0.1', 
      'PORT': '5432', 
     }, 
    }, 
    TIME_ZONE='America/Montreal', 
) 

Trong tập tin chứa khởi động thói quen

import os 
import django 

import v10consolidator.settings 
from myapp.models import * 

os.environ.setdefault(
    "DJANGO_SETTINGS_MODULE", 
    "myapp.settings" 
) 
django.setup() 
1
import os, sys 

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings") 
sys.path.append(os.path.abspath(os.path.join(BASE_DIR, os.pardir))) 

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

from app.models import MyModel 
Các vấn đề liên quan