通过将django中的django.db.models.Model子类化,可以添加,删除,更新多个数据库

时间:2019-02-08 10:55:44

标签: python django django-models multi-database

我想使用django.db.models.Model

写入要添加,更新到多个数据库的删除操作

我可以通过在settings.py中设置multi-db来添加到多个数据库

所以设置文件看起来像

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': config['DB_NAME'],
        'USER': config['DB_USER'],
        'PASSWORD': config['DB_PASSWORD'],
        'HOST': config['DB_HOST'],
        'PORT': config['DB_PORT'],
    },
    'tableau': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'tableau',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'localhost',
        'PORT': 5432,
    },
}

然后,我创建django.db.models.Model的子类并在应用程序的model.py中进行建模

from django.db.models import Model

class MultiDbModel(Model):
    class Meta:
        abstract = True

    def save(self, *args, **kwargs):
        for dbname in settings.DATABASES:
            super(MultiDbModel, self).save(using=dbname)

class People(MultiDbModel):
    name = CharField(max_length=255)
    country = CharField(max_length=255)

        def save(self, *args, **kwargs):
            super(App, self).save(args, kwargs)

因此,当我创建新对象时,它会保存到两个数据库中。

People.objects.create(name='alok', location='India')

对于这种方法,我想添加updatedelete查询的功能,就像create正常工作一样。

运行updatedelete查询时会调用什么方法,或者如何为多个数据库添加删除和更新功能?

1 个答案:

答案 0 :(得分:0)

我将覆盖管理方法。p {x} = (y : f x ) (z : g x) → (coerce f≡g y) ≡ z 既可以创建又可以更新方法。为deleting对象添加save_model

请参阅: https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#modeladmin-methods