Django中多数据库的使用

django中,你可以为每一个app都单独设置一个数据库。

一、在项目project下新建文件database_router.py文件:

DATABASE_MAPPING = {‘app1‘: ‘db1‘,‘app2‘:‘db2‘}class DatabaseAppsRouter(object):    def db_for_read(self, model, **hints):        """"        Point all read operations to the specific database.        """        if model._meta.app_label in DATABASE_MAPPING:            return DATABASE_MAPPING[model._meta.app_label]        return None    def db_for_write(self, model, **hints):        """        Point all write operations to the specific database.        """        if model._meta.app_label in DATABASE_MAPPING:            return DATABASE_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 = DATABASE_MAPPING.get(obj1._meta.app_label)        db_obj2 = DATABASE_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_migrate(self, db, app_label, model=None, **hints):        """        Make sure the auth app only appears in the ‘auth_db‘        database.        """        if db in DATABASE_MAPPING.values():            return DATABASE_MAPPING.get(app_label) == db        elif app_label in DATABASE_MAPPING:            return False        return None

二、settings.py

2.1 数据库配置

DATABASES = {ABASES = {    ‘default‘: {        ‘ENGINE‘: ‘django.db.backends.sqlite3‘,        ‘NAME‘: os.path.join(BASE_DIR, ‘db.sqlite3‘),    },    ‘db1‘: {        ‘ENGINE‘: ‘django.db.backends.mysql‘,        ‘NAME‘: ‘dbname1‘,        ‘USER‘: ‘your_db_user_name‘,        ‘PASSWORD‘: ‘yourpassword‘,        "HOST": "localhost",    },    ‘db2‘: {        ‘ENGINE‘: ‘django.db.backends.mysql‘,        ‘NAME‘: ‘dbname2‘,        ‘USER‘: ‘your_db_user_name‘,        ‘PASSWORD‘: ‘yourpassword‘,        "HOST": "localhost",    },}

2.2 router配置

DATABASE_ROUTERS = [‘project_name.database_router.DatabaseAppsRouter‘]

三、使用时数据库同步

python manage.py migrate --database=db1python manage.py migrate --database=db2

原文地址:https://www.cnblogs.com/stormztt/p/11304756.html

时间: 2024-11-08 21:46:33

Django中多数据库的使用的相关文章

[Django]中建立数据库视图

Django中建立数据库视图 Django中没有建立视图的接口,如果要建立一个视图需要一些手动的改变. 这里使用的Django 版本>1.5, 使用的数据库为mysql 第一步 建立视图,例如视图的名称叫做 user_info 第二步 model中这么写: class MyModel(models.Model): ... class Meta: managed = False db_table = "user_info" 这样就可以把视图经过orm变成对象了. REF: crea

关于Django中的数据库操作API之distinct去重的一个误传

关于Django中的数据库操作API之distinct去重的一个误传 最近在做一个Server的项目,后台框架是Apache mod_wsgi + django.django是一个基于Python的Web开发框架,功能十分强大,至于有多强大,还是读者们自己去体验吧.我在这里要说的一个问题是关于Python的ORM功能的.问题就在django提供的数据库操作API中的distinct()函数,了解SQL语句的读者都应该知道,DISTINCT关键字可以在select操作时去重.django里的这个d

关于Django中ORM数据库迁移的配置

Django中ORM数据库迁移配置 1,若想将模型转为mysql数据库中的表,需要在settings中配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'bms', # 要连接的数据库,连接前需要创建好 'USER':'root', # 连接数据库的用户名 'PASSWORD':'', # 连接数据库的密码 'HOST':'127.0.0.1', # 连接主机,默认本级 'PORT':3306

Django中的数据库查询

web应用需要经常向数据库查询相关的数据,Django语言也不例外.了解Django中的数据查询操作,对于优化应用的性能,有着重要的意义. 基础信息 Django中,model通过Manager获取QuerySet,每个model至少有objects这个 Manager . QuerySet 可以有一个或多个 filter , filter 根据传入的参数返回 QuerySet 结果. 用SQL来对比, QuerySet 相当于 SELECT , filter 相当于 WHERE 或者是 LIM

在Django中使用数据库遇到的问题

很多人读了Django老版本的书籍,却安装了比较新的Django,以至于在使用数据库时出了很多头疼的问题,我也不例外,不想再让别人继续被折磨了.现将本人遇到的一些问题以及解决的办法整理如下:(我的环境是Linux终端) 一. 数据库的配置: 1.首先你要保证在终端上安装了数据库(MySQL).接下来在在里面创建你自己的数据库,比如create database djangodb. 2.cd到你创建工程的目录,我的是username/djcode/mysite,然后cd 到mysite里,然后vi

django中对数据库的增删改查

Django的配置文件时settings.py中的 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 只修改这一个 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.d

django中对数据库生成记录操作失败

在终端执行以下语句时,会发现一点效果也没有,但是在manage.py中会成功: python3 manage.py makemigrations # 仅仅是在小本本上(migrations文件夹)记录数据库的修改 并不会直接操作数据 python3 manage.py migrate # 将数据库修改记录 真正同步到数据库 最后发现开始的python3是为了避免python版本的重叠问题,在环境变量配置的时候,区分加上去的,而我的配置不是python3,所以不生效. 我的解释器: 所以正确的语句

django中的数据库外键操作

以MYSQL为例: (1)在model中定义两个数据表,食物信息和食物类别信息 class foodInfo(models.Model): food_id = models.AutoField(max_length=4)   #自定义主键,不指定主键默认会生成一个名为'ID'列的主键 food_name = models.CharField(max_length=10) food_content = models.CharField(max_length=100) food_price = mo

django中怎么使用mysql数据库的事务

Mysql数据库事务: 在进行后端业务开始操作修改数据库时,可能会涉及到多张表的数据修改,对这些数据的修改应该是一个整体事务,即要么一起成功,要么一起失败. Django中对于数据库的事务,默认每执行一句数据库操作,便会自动提交.我们需要在保存数据库操作中自己控制数据库事务的执行流程. 在Django中可以通过django.db.transaction模块提供的atomic来定义一个事务,atomic提供两种用法: 装饰器用法 from django.db import transaction