zoukankan      html  css  js  c++  java
  • Django中如何实现数据库路由?

      虽然我们提供了数据库的信息,它知道怎么连接数据库,但问题是我们保存里面有很多模型,它不知道哪个模型存到哪个数据库。这就要求我们自己来指定,也就是我们自己来实现一个数据库路由。一个数据库路由是一个拥有4个方法的类,这四个方法是:

      db_for_read(model, **hints)

      对于该model 用哪个数据库来读。

      db_for_write(model, **hints)

      对于该model用哪个数据库来写。

      allow_relation(obj1, obj2, **hints)

      是否允许两个对象关联到数据库。

      allow_migrate(db, app_label, model_name=None, **hints)

      对于指定的app,是否允许对db这个数据库进行migrate

      打开routers.py文件,做如下配置:

        class SampleDBRouter(object):

      def db_for_read(self, model, **hints):

      if model._meta.label == 'multiDB.Logger':

      return 'logs'  (如果是Logger'的模型,就返回logs的数据库。将信息存到lab2

      elif model._meta.label == 'multiDB.LogUser':

      return 'users'(如果是LogUser'的模型,就返回users的数据库。将信息存到lab1

      return None

      def db_for_write(self, model, **hints):

      if model._meta.label == 'multiDB.Logger':

      return 'logs'

      elif model._meta.label == 'multiDB.LogUser':

      return 'users'

      return None

      def allow_relation(self, obj1, obj2, **hints):

      return True    (关联,存放到指定地方。)

      def allow_migrate(self, db, app_label, model=None, **hints):

      if model._meta.label == 'multiDB.Logger':

      return db == 'logs'(如果模型是multiDB.Logger,数据库是logs,就可以迁徙)

      elif model._meta.label == 'multiDB.LogUser':

      return db == 'users'(如果模型是multiDB.LogUser,数据库是users,就可以迁徙)

      return None

    原文链接:http://www.maiziedu.com/wiki/django/server/

  • 相关阅读:
    X oracle move lob 字段到另外的表空间
    X CentOS7使用firewalld打开关闭防火墙与端口
    X ftpd服务常见配置总结(/etc/vsftpd/vsftpd.conf) 【附参数文件】
    P1853 投资的最大效益
    P1466 [USACO2.2]集合 Subset Sums
    小A点菜
    NASA的食物计划
    动态规划入门笔记
    数字三角形 Number Triangles
    P1825 [USACO11OPEN]Corn Maze S
  • 原文地址:https://www.cnblogs.com/space007/p/6526971.html
Copyright © 2011-2022 走看看