Django+xadmin+rules 静态多数据库开发 第二章

本章主要描述Oracle数据库的配置

其中,主数据库为mysql(即default),次数据库为oracle

1. 添加多数据库的配置文件

# -*- coding: utf-8 -*-
from django.conf import settings

DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING


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 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

    # for Django 1.4 - Django 1.6
    def allow_syncdb(self, db, model):
        """Make sure that apps only appear in the related database."""

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

    # Django 1.7 - Django 1.11
    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if db in DATABASE_MAPPING.values():
            return DATABASE_MAPPING.get(app_label) == db
        elif app_label in DATABASE_MAPPING:
            return False
        return None

2. setting.py中添加多数据库配置

SUB_DIR = os.path.basename(os.path.dirname(__file__))
DATABASE_ROUTERS = [
    '{}.database_router.DatabaseAppsRouter'.format(SUB_DIR)
]
# app_name,db_name
DATABASE_APPS_MAPPING = {
    'xadmin': 'default',
    'app_oracle': 'db_oracle',
}

此时,目录层级结构如下:

 

3. 添加oracle_app,如下图:

 

其models.py内容如下,app_label指定了该app使用哪个数据库:

from django.db import models


# Create your models here.


class Student(models.Model):
    id = models.IntegerField(primary_key=True)  # 这里要创建ID
    name = models.CharField(max_length=50, verbose_name='姓名')
    gender = models.CharField(max_length=10, default='男', choices=(("男", "男"), ("女", "女")), verbose_name='性别')
    age = models.IntegerField(default=0, verbose_name='年龄')
    createTime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')

    class Meta:
        db_table = 'Student'
        verbose_name = "学生"
        verbose_name_plural = verbose_name
        ordering = ['-createTime']
        app_label = 'app_oracle'

    def __str__(self):
        return self.name

adminx.py文件内容如下,目的是让xadmin对其进行管理展示:

from django.contrib import admin

# Register your models here.
import xadmin
from app_oracle.models import Student


class StudentAdmin(object):
    # 不显示字段
    exclude = ['id']
    pass


xadmin.sites.site.register(Student, StudentAdmin)

init.py文件内容如下:

default_app_config = 'app_oracle.apps.AppOracleConfig'

apps.py文件内容如下,注意:这里的orderIndex_=1你要删掉,因为我这里配置的app展示顺序,不删掉会出错:

from django.apps import AppConfig


class AppOracleConfig(AppConfig):
    name = 'app_oracle'
    verbose_name = 'Oracle模块'
    orderIndex_ = 1

4. 创建oralce序列,并设置指定表的使用该序列:

create sequence STUDENT_SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;


CREATE OR REPLACE TRIGGER " STUDENT_TRI" BEFORE
        INSERT ON STUDENT
        FOR EACH ROW       
BEGIN
          SELECT student_seq.NEXTVAL INTO :NEW.ID FROM DUAL;
        END;

5. 将相应表同步到数据库

  • 数据库表创建(更新)命令:python manage.py makemigrations app_oracle
  • 数据库表应用命令:python manage.py migrate --database=db_oracle

6. 打开浏览器,查看该页面,如下图:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值