1. django反向生成orm的类代码

使用命令python manage.py inspectdb > app01/models.py,注意,我这里的app01是app的名字。

2.django连接多个数据库

在很多情况下,一个项目里面不止一个app,也不止使用一个库,那么就面临着连接多个数据库的问题。

那么先来说说,如何连接使用多个app连接多个数据库:

以mysql为例:

在settings.py文件里面:

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.mysql',
       'NAME': "db0",
       'USER': 'root',
       'PASSWORD': '123456',
       'HOST': '127.0.0.1',
       'PORT': '3306',
  },
   'db1': {
       'ENGINE': 'django.db.backends.mysql',
       'NAME': 'db1',
       'USER': 'root',
       'PASSWORD': '123456',
       'HOST': '127.0.0.1',
       'PORT': '3306',
  },
   'db2': {
       'ENGINE': 'django.db.backends.mysql',
       'NAME': 'db2',
       'USER': 'root',
       'PASSWORD': '123456',
       'HOST': '127.0.0.1',
       'PORT': '3306',
  },
}
# 此配置,列表里写:   项目工程的名字.database_router.DatabaseAppsRouter
DATABASE_ROUTERS = ['your_project_name.database_router.DatabaseAppsRouter']
DATABASE_APPS_MAPPING = {
   # 这里面对应的是,app的名字和数据库的名字(在上面注册的)
   'app01': 'default',
   'app02': 'db1',
   'app03': 'db2',
}

另外,为了能够访问到不同的库,还需要加一个文件,写上数据库的路由:

你的项目名/项目名的文件夹下(举例:比如我起了一个项目叫test_django,那么在test_django/test_django,也就是和settings.py同级目录),新建一个文件叫:

database_router.py,写入如下代码:

# database_router.py
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

   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

   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

   # 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):
       print(db, app_label, model_name, hints)
       if db in DATABASE_MAPPING.values():
           return DATABASE_MAPPING.get(app_label) == db
       elif app_label in DATABASE_MAPPING:
           return False
       return None

那么,此时,你就可以访问不同的数据库了。

3.django多个数据库反向生成orm代码

现在,多个库已经有了,那么,如何使用不同的库,在不同的app里面生成orm的代码呢?

python manage.py inspectdb --database db1 > app01/models.py

注意,上面的db1是你注册在settings.py文件下面的DATABASES,里面的数据库名字,app01是你的app名字。

解决bug:

当遇到bug:

# The error was: (1, "Can't create/write to file '/tmp/#sql_7d33_0.MYI' (Errcode: 13 - Permission denied)")
# Unable to inspect table 'session'

到数据库所在的服务器上:

chmod 777 /tmp

即可解决此问题。

关于django操作orm的一些事--反向生成orm、连接多个数据库的更多相关文章

  1. Django中反向生成models

    我们在展示django ORM反向生成之前,我们先说一下怎么样正向生成代码. 正向生成,指的是先创建model.py文件,然后通过django内置的编译器,在数据库如mysql中创建出符合model. ...

  2. django 与 flask里面从已有数据库表中反向生成models

    django: 配置好数据库连接 python manage.py  inspectdb  > models.py 即可反向生成orm使用的models, 注意: > 后面可以定义为指定路 ...

  3. Django学习---路由url,视图,模板,orm操作

    Django请求周期 url ->  路由系统  ->函数或者类 -> 返回字符串 或者 模板语言 Form表单提交: 点击提交 -> 进入url系统  ->  执行函数 ...

  4. django上课笔记1-目录介绍-路由系统-ORM操作

    一.Django目录介绍 django-admin startproject mysite # 创建名为mysite的项目 cd mysite # 切换到该目录下 python manage.py s ...

  5. django 操作数据库--orm(object relation mapping)---models

    思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...

  6. 数据库表反向生成(二) Django ORM inspectdb

    在前一篇我们说了,mybatis-generator反向生成代码. 这里我们开始说如何在django中反向生成mysql model代码. 我们在展示django ORM反向生成之前,我们先说一下怎么 ...

  7. python Django 之 Model ORM inspectdb(数据库表反向生成)

    在前一篇我们说了,mybatis-generator反向生成代码. 这里我们开始说如何在django中反向生成mysql model代码. 我们在展示django ORM反向生成之前,我们先说一下怎么 ...

  8. Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点)

    Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点) 一丶Django的静态文件配置 #we ...

  9. Django框架_URLconf、Views、template、ORM

    目录: 一.Django-MTV MTV模型 Django基本命令 视图层之路由配置系统(views) 视图层之视图函数(views) 模板层(template) 二.Django-model基础 O ...

随机推荐

  1. Lightning Web Components 开发指南(二)

    Lightning Web Components 是自定义元素使用html 以及现代javascript进行构建. Lightning Web Components UI 框架使用web compon ...

  2. 27-ESP8266 SDK开发基础入门篇--编写Android SmartConfig一键配网程序

    style="font-size: 18pt;">https://www.cnblogs.com/yangfengwu/p/11429007.html https://wik ...

  3. CSPS_112

    这是Dybala神的差点AK场, 可我T2读入写挂&&T3上届算错没有AK 如果这是C... T1 xjb猜了个结论就过对拍 T2 topsort好题 T3 各险绅嗵的一个dp 我打的 ...

  4. 【区间dp】P1063 能量项链

    一道区间dp的水题 题目链接 来快活啊! 思路 很简单的区间dp,思路和floyed差不多,就是需要把项链处理成环形 用\(f[l][r]\)表示以\(a[l]\)开头\(a[r]\)结尾的数串的最大 ...

  5. GitHub 远程仓库 de 第一次配置

    GitHub远程仓库, Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.首先找一台电脑充当服务器的角色, 每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上 ...

  6. beforeDestroy的使用

    beforeDestroy ---实例销毁之前调用 需求是这样的: important:下面截图数据都是测试数据 日期在我点击查询的时候要存储,刷新就读内存,但是我点击其他页面再进来的时候,这个内存要 ...

  7. windows 共享网络

    windows 共享网络 今天单位的网络突然断了,光猫LOS亮红灯,宽带报修.等了半天还没来,下面科室要上报资料,急着用网, 通过windows的共享网络+无线网卡暂时用我的手机流量. 找了一台电脑插 ...

  8. DotNet Resource

    目录 API 应用框架(Application Frameworks) 应用模板(Application Templates) 人工智能(Artificial Intelligence) 程序集处理( ...

  9. python ocr图片中汉字识别

    import os os.chdir("C:\Program Files (x86)\Tesseract-OCR") main = "Tesseract.exe d:/t ...

  10. MySQL事务部分回滚-回滚到指定保存点

    我们可以在mysql事务处理过程中定义保存点(SAVEPOINT),然后回滚到指定的保存点前的状态. 定义保存点,以及回滚到指定保存点前状态的语法如下. 定义保存点---SAVEPOINT 保存点名; ...