Tôi đã hỏi điều này trong nhóm người dùng không có phản hồi vì vậy tôi nghĩ tôi sẽ thử ở đây. Tôi đang cố thiết lập trình quản lý tùy chỉnh để kết nối với cơ sở dữ liệu khác trên cùng một máy chủ như kết nối mysql mặc định của tôi. Tôi đã thử theo các ví dụ here và here nhưng không có may mắn. Tôi nhận được một bộ trống khi trả lại MyCustomModel.objects.all()
.Nhiều Cơ sở dữ liệu trong Django 1.0.2 với trình quản lý tùy chỉnh
Đây là những gì tôi có trong manager.py
from django.db import models
from django.db.backends.mysql.base import DatabaseWrapper
from django.conf import settings
class CustomManager(models.Manager):
"""
This Manager lets you set the DATABASE_NAME on a per-model basis.
"""
def __init__(self, database_name, *args, **kwargs):
models.Manager.__init__(self, *args, **kwargs)
self.database_name = database_name
def get_query_set(self):
qs = models.Manager.get_query_set(self)
qs.query.connection = self.get_db_wrapper()
return qs
def get_db_wrapper(self):
# Monkeypatch the settings file. This is not thread-safe!
old_db_name = settings.DATABASE_NAME
settings.DATABASE_NAME = self.database_name
wrapper = DatabaseWrapper()
wrapper._cursor(settings)
settings.DATABASE_NAME = old_db_name
return wrapper
và đây là những gì tôi có trong models.py:
from django.db import models
from myproject.myapp.manager import CustomManager
class MyCustomModel(models.Model):
field1 = models.CharField(max_length=765)
attribute = models.CharField(max_length=765)
objects = CustomManager('custom_database_name')
class Meta:
abstract = True
Nhưng nếu tôi chạy MyCustomModel.objects.all()
tôi nhận được một danh sách trống.
Tôi khá mới ở công cụ này vì vậy tôi không chắc chắn nếu điều này làm việc với 1.0.2, tôi sẽ xem xét mã Trình quản lý để xem liệu tôi có thể tìm được số nhưng tôi tự hỏi liệu tôi có đang làm điều gì đó sai ở đây.
UPDATE: này bây giờ trong Django thân và sẽ là một phần của 1.2 phát hành http://docs.djangoproject.com/en/dev/topics/db/multi-db/
Điều này vi phạm một số tính năng cần thiết của Django. Kết nối cơ sở dữ liệu duy nhất nằm trong mô-đun cài đặt của bạn. Bạn đang thực sự cố gắng làm gì? Bạn nên xem xét các cách tiếp cận khác thay vì phá vỡ Django. –
Nếu bạn nhìn vào các ví dụ tôi đang cố gắng sử dụng, một ví dụ là từ Adrian. Tôi có một công việc xung quanh giải pháp mà tôi sử dụng một mô-đun trợ giúp và chỉ ghi đè lên chức năng lưu trong mô hình, nhưng đây là một chút của một hack và tôi không nhận được bất kỳ lợi ích django. Nếu bạn có đề xuất về cách thêm nhiều hỗ trợ cơ sở dữ liệu vào ứng dụng, vui lòng cho tôi biết. –
Bạn có thể kiên nhẫn hơn một chút không? Có một dự án GSOC đang diễn ra ngay bây giờ, đó là thêm nhiều hỗ trợ cơ sở dữ liệu vào Django. – ironfroggy