Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:独立于应用程序的多个读写数据库_Django_Django Orm_Multiple Databases_Django Database - Fatal编程技术网

Django:独立于应用程序的多个读写数据库

Django:独立于应用程序的多个读写数据库,django,django-orm,multiple-databases,django-database,Django,Django Orm,Multiple Databases,Django Database,在某些特定条件下,例如, 1.一个DB仅用于写入(DB\u用于写入.sqlite3) 2.用于读取目的的另外两个DB(read\u replica\u 1.sqlite3,read\u replica\u 2.sqlite3) 3.所有这3 DB应始终同步(3 DB应始终包含相同的数据) 4.所有操作,如CRUD,迁移等,都独立于app或model 这是我的Db\u路由器.py import random class ExampleDatabaseRouter(object): de

在某些特定条件下,例如,

1.一个DB仅用于写入(
DB\u用于写入.sqlite3

2.用于读取目的的另外两个DB(
read\u replica\u 1.sqlite3
read\u replica\u 2.sqlite3

3.所有这3 DB应始终同步(3 DB应始终包含相同的数据)
4.所有操作,如
CRUD
迁移
等,都独立于
app
model


这是我的Db\u路由器.py

import random


class ExampleDatabaseRouter(object):
    def db_for_read(self, model, **hints):
        db_list = ('db_for_read_1', 'db_for_read_2')
        return random.choice(db_list)

    def db_for_write(self, model, **hints):
        return 'db_for_write_only'

    def allow_relation(self, obj1, obj2, **hints):
        # I couldn't understand what would do this method
        return

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        # sync all DB
        return

不幸的是,我无法理解
allow\u relation()
方法的用途。我希望有人能帮我。

允许_关系(obj1、obj2、**提示)^

如果应该允许obj1和obj2之间的关系,则返回True;如果应该防止这种关系,则返回False;如果路由器没有意见,则返回None这纯粹是一个验证操作,由外键和多对多操作使用,以确定两个对象之间是否允许存在关系。

与文档中一样,此方法仅确定传入其中的对象是否有资格在它们之间创建关系。使用多个数据库时,可能会出现这样的情况:来自不同数据库的表需要它们之间的关系,但Django目前不支持这种关系,这种关系通常被称为跨数据库关系。这是因为引用完整性。为了维护两个对象之间的关系,Django需要知道相关对象的主键是有效的。如果主键存储在单独的数据库中,则无法轻松评估主键的有效性

如果您需要更多地研究跨数据库关系,那么django文档提供了更好的方法


实际上,Django文档几乎涵盖了路由器的所有内容。还包括了一个非常基本的示例。

根据您的解释,在我的例子中,不可能存在跨数据库关系。我说得对吗。那我怎么能一直同步我的三分贝呢?你能帮我找到解决办法吗?