`
xiaolin0199
  • 浏览: 573052 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

django多数据库的实现

 
阅读更多

参考文档:

 

 * https://docs.djangoproject.com/en/1.2/topics/db/multi-db/#topics-db-multi-db-routing

 * http://blog.sina.com.cn/s/blog_3fbe78a60100p68a.html

 

目的:新项目中实现 按app实现数据库的分离

 

以非IC模块product为例

 

1. setting.py中加入

...
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'xiaofei_ecgoo',                      # Or path to database file if using sqlite3.
        'USER': 'xiaofei',                      # Not used with sqlite3.
        'PASSWORD': '*****',                  # Not used with sqlite3.
        'HOST': '192.168.0.8',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '3306',                      # Set to empty string for default. Not used with sqlite3.
    },
     'product': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'xiaofei_product',                      # Or path to database file if using sqlite3.
        'USER': 'xiaofei',                      # Not used with sqlite3.
        'PASSWORD': '*******',                  # Not used with sqlite3.
        'HOST': '192.168.0.8',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '3306',                      # Set to empty string for default. Not used with sqlite3.
    }
 }
...

 

2.增加dbrouter.py

class MyAppRouter(object):
    """A router to control all database operations on models in
    the myapp application"""

    def db_for_read(self, model, **hints):
        "Point all operations on myapp models to 'other'"
        if model._meta.app_label == 'product':
            return 'product'
        return None

    def db_for_write(self, model, **hints):
        "Point all operations on myapp models to 'other'"
        if model._meta.app_label == 'product':
            return 'product'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        "Allow any relation if a model in myapp is involved"
        if obj1._meta.app_label == 'product' or obj2._meta.app_label == 'product':
            return True
        return None

    def allow_syncdb(self, db, model):
        "Make sure the myapp app only appears on the 'other' db"
        if db == 'product':
            return model._meta.app_label == 'product'
        elif model._meta.app_label == 'product':
            return False
        return None

class MasterSlaveRouter(object):
    """A router that sets up a simple master/slave configuration"""

    def db_for_read(self, model, **hints):
        "Point all read operations to a random slave"
        return 'default'

    def db_for_write(self, model, **hints):
        "Point all write operations to the master"
        return 'default'

    def allow_relation(self, obj1, obj2, **hints):
        "Allow any relation between two objects in the db pool"
        db_list = ('default','product')
        if obj1._state.db in db_list and obj2._state.db in db_list:
            return True
        return None

    def allow_syncdb(self, db, model):
        "Explicitly put all models on all databases."
        return True

 

3.配置settings.py

DATABASE_ROUTERS = ['new_ecgoo.dbrouter.MyAppRouter', 'new_ecgoo.dbrouter.MasterSlaveRouter']

 

 

注意:

写道
刚调试时,有几个页面一直报错,后发现数据库分离后,在读关联数据时,有几个写法要注意:
如:
ic = Ic.objects.filter(u__username=name)
应改为:
user = User.objects.get(username = name)
ic = Ic.objects.filter(u=user)

 

 

分享到:
评论

相关推荐

    Django引用ztree实现数据库表导入树状目录

    在本例中,我们需要从数据库中读取数据表,这可以通过Django的ORM(对象关系映射)系统实现,它允许我们以Python对象的方式操作数据库。 3. ZTree插件: ZTree是一款基于JavaScript的树形插件,适用于Web前端展示...

    Django 查询数据库并返回页面的例子

    本文将介绍在Python框架Django中如何进行数据库查询以及将查询结果渲染到Web页面上的过程。Django是一个高级的、开源的Web应用框架,它遵循模型-视图-控制器(MVC)设计模式,提供了快速开发Web应用的便捷性。 首先...

    PythonDjango支持像PostgresCitus这样的分布式多租户数据库

    总结来说,Python Django与Postgres Citus的结合提供了强大的分布式多租户数据库解决方案。通过利用Django的ORM和Citus的分布式能力,开发者能够构建可扩展且高效的应用,满足大量用户的需求。尽管存在一些挑战,但...

    django实现excel表导入到数据库(超级详细)

    django view接口实现excel表导入到数据库,主要运用xlrd包读取到excel表单的内容,然后再数据库里创建excel表的数据类型。我在里面增加了一层判断,就是如果库里面有excel表里面人或数据的话就会更新改变的数据,...

    Django读取Mysql数据并显示在前端的实例

    在本实例中,我们将探讨如何使用Django框架从MySQL数据库中读取数据并将其呈现到前端页面上。Django是一个强大的Python Web开发框架,而MySQL则是一种广泛使用的关系型数据库管理系统。结合两者,我们可以构建动态的...

    django 连接数据库、上传文件

    通过以上步骤,你就能够在Django项目中成功地连接MySQL数据库并实现文件上传功能。记住,安全性和性能优化在实际生产环境中非常重要,例如,使用合适的权限设置、限制文件类型、处理大文件上传等。

    python使用Django库向mysql数据库插入数据

    本教程将详细介绍如何使用Django与MySQL协同工作,实现数据的插入操作。 首先,确保你已经安装了Python、Django和MySQL的相关库。Python的安装是基础,Django可以通过pip来安装:`pip install django`。对于MySQL,...

    Django多数据库的实现过程详解

    首先,设置多数据库需要在Django的settings.py文件中定义DATABASES字典。在这个字典里,可以定义一个默认的数据库,同时也可以指定其他额外的数据库。例如,如果你需要两个数据库,一个用于应用数据,另一个用于用户...

    django实现用户的登录注册连接后台数据库完成主页的搭建

    在本项目中,我们主要探讨如何使用Python的Web框架Django来实现用户登录、注册功能,同时连接后台数据库,构建一个完整的主页,并加入忘记密码和验证码等增强安全性的重要特性。以下将详细介绍这些知识点: 1. ...

    django起步到实现数据库交互.pdf

    1.Python开发工具之pycharm起步。...6.成功实现浏览器页面与数据库交互操作。 ...... 备注:上述过程图文并茂,以至于半小时学会起步到走路,同时让你知道开发网站居然可以如此简单和快乐。继续努力!

    Python-Django模型字段加密解密您的数据并加密保存至数据库中

    本文将深入探讨如何在Django中实现模型字段的加密和解密,以及如何利用luojilab-django-mirage-field-5d96836这样的库来简化这个过程。 首先,理解Django模型字段。在Django中,模型是数据库表的面向对象表示。每个...

    Django数据库内省工具通过数据表名就可以动态创建一个即时可用的Djangomodels对象

    要实现这一功能,我们首先需要导入Django的相关模块: ```python from django.db import connections from django.db.models.base import ModelBase from django.db.models.fields import * ``` 接着,我们可以...

    基于Django的数据库监控系统.zip

    总结来说,这个基于Django的数据库监控系统涉及到了Python基础、Django框架的使用、数据库管理、Web开发实践、版本控制以及监控技术等多个方面的知识。通过深入学习和理解这些内容,可以构建出高效、可扩展的数据库...

    基于python+Django+MYSQL实现的图书管理系统代码+数据库(高分毕设)

    基于python+Django+MYSQL实现的图书管理系统代码+数据库(高分毕设)基于python+Django+MYSQL实现的图书管理系统代码+数据库(高分毕设)基于python+Django+MYSQL实现的图书管理系统代码+数据库(高分毕设)基于...

    Python-基于inception和django的数据库web管理平台

    【Python-基于inception和django的数据库web管理平台】 这个项目是使用Python的两个著名框架——Django和Inception——构建的一个数据库Web管理平台。Django是一个强大的、高性能的Web框架,它允许开发者快速地创建...

    django 多数据库配置教程

    根据提供的文件信息,本文将详细介绍Django多数据库配置的方法和...通过以上步骤,我们可以实现Django项目中的多数据库配置,并通过自定义路由器来管理不同APP的数据存储需求,使得数据的存储和管理更加灵活和高效。

    python电脑控制手机端应用Django源码数据库演示.zip

    【标题】:“Python电脑控制...总之,这个项目是一个全面的Django实战案例,涵盖了Web开发的多个方面,对于提升你的Python和Django技能大有裨益。通过深入研究并运行这个项目,你将对Python Web开发有更深入的理解。

    详解多线程Django程序耗尽数据库连接的问题

    在使用Django框架开发多线程应用程序时,可能会遇到数据库连接耗尽的问题。这一问题在Web项目中可能不会遇到,因为Web请求会在处理结束时关闭数据库连接,但非Web项目由于没有固定的请求结束事件,可能会导致数据库...

    基于python+Django的数据库监控系统.zip

    在Python和Django的项目中,可能使用了如psycopg2(PostgreSQL)、pyodbc(ODBC兼容数据库)、mysql-connector-python(MySQL)等库来实现数据库连接和操作。 【毕业设计】 毕业设计是高等教育中的一项重要任务,...

    python的django框架实现数据库链接与数据库基本操作

    python的django框架实现数据库链接与数据库基本操作

Global site tag (gtag.js) - Google Analytics