Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chia sẻ cơ sở dữ liệu (mysql) giữa các ứng dụng Django với các bộ định tuyến Cơ sở dữ liệu

Có thể app2_model2 đã được tạo trước đó, hãy kiểm tra!

Bạn có thể làm như thế này:

settings.py

DATABASE_APPS_MAPPING = {'app1': 'mydb', 'app2': 'mydb'}
DATABASE_ROUTERS = ['path.router.DatabaseAppsRouter']

router.py

from django.conf import settings

class DatabaseAppsRouter(object):
    """
    A router to control all database operations on models for different
    databases.

    In case an app is not set in settings.DATABASE_APPS_MAPPING, the router
    will fallback to the `default` database.

    Settings example:

    DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'}
    """

    def db_for_read(self, model, **hints):
        """Point all read operations to the specific database."""
        if settings.DATABASE_APPS_MAPPING.has_key(model._meta.app_label):
            return settings.DATABASE_APPS_MAPPING[model._meta.app_label]
        return None

    def db_for_write(self, model, **hints):
        """Point all write operations to the specific database."""
        if settings.DATABASE_APPS_MAPPING.has_key(model._meta.app_label):
            return settings.DATABASE_APPS_MAPPING[model._meta.app_label]
        return None

    def allow_relation(self, obj1, obj2, **hints):
        """Allow any relation between apps that use the same database."""
        db_obj1 = settings.DATABASE_APPS_MAPPING.get(obj1._meta.app_label)
        db_obj2 = settings.DATABASE_APPS_MAPPING.get(obj2._meta.app_label)
        if db_obj1 and db_obj2:
            if db_obj1 == db_obj2:
                return True
            else:
                return False
        return None

    def allow_syncdb(self, db, model):
        """Make sure that apps only appear in the related database."""

        if db in settings.DATABASE_APPS_MAPPING.values():
            return settings.DATABASE_APPS_MAPPING.get(model._meta.app_label) == db
        elif settings.DATABASE_APPS_MAPPING.has_key(model._meta.app_label):
            return False
        return None


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn MySQL phức tạp đang đưa ra kết quả không chính xác

  2. sự sụp đổ giới hạn mysql, dẫn đến tương tác dữ liệu

  3. Không thể đăng nhập vào mysql 5.7.9 sau khi thay đổi mật khẩu

  4. Cơ sở dữ liệu nhập MySQL nhưng bỏ qua bảng cụ thể

  5. MySQL Joins:chọn bảng để tham gia dựa trên dữ liệu bảng nguồn