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. 使用gitstats分析git 仓库代码

    gitstats 是一个很不错的git 代码提交分析工具,可以帮助我们生成图表统计结果 工具文档信息 gitstats http://gitstats.sourceforge.net/ 安装 使用ce ...

  2. sdcf day1 qwq比赛题解

    目录 写在前面 A 链接 思路 代码 B 链接 翻译 思路 代码 C 链接 翻译 思路 代码 写在前面 来到夏令营的第一场比赛,全是水题(第一题除外,不过是原题还是之前做过的,而且是并查集的果题,咕咕 ...

  3. epoch,iteration与batchsize的区别

    神经网络中epoch与iteration是不相等的 batchsize:中文翻译为批大小(批尺寸).在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练: iterat ...

  4. Java-Long类型精度丢失问题

    问题 今天碰到一个问题,后端需要返回给前端Long类型的id,前端收到的id会发生精度丢失. 测试代码:后端返回的值为344739147160346624 但是前端获取的值为: 解决办法 将返回的值转 ...

  5. 可变参数的函数(c++)【转载】

    摘自<c语言精彩编程百例>,要定义可变参数的函数,在c++当中当包含<cstdarg>,在c语言当中当包含<stdarg.h>,使用任何可变长度的变元被访问之前,必 ...

  6. Wireshark常用快捷键&&过滤器语法

    目录 一.快捷键 二.过滤器语法 1.捕获过滤器的BPF(Berkeley Packet Filter)语法 2.显示过滤器 一.快捷键 Ctrl+M 标记/取消标记 shift+ctrl+N/B 下 ...

  7. better-scroll在vue项目中的使用

    1.准备工作 在项目中安装better-scroll: npm install --save better-scroll 组件中引入插件 import BScroll from "bette ...

  8. github上如何删除一个项目(仓库)

    备忘  链接:https://blog.csdn.net/deng0zhaotai/article/details/38535251

  9. Sharding-Jdbc 自定义分库分表-复合分片算法自定义实现

    Sharding-JDBC中的分片策略有两个维度,分别是: 数据源分片策略(DatabaseShardingStrategy) 表分片策略(TableShardingStrategy) 其中,数据源分 ...

  10. python中pygame游戏打包为exe文件

    pyinstaller打包游戏的方法: 1.在命令窗口安装pyinstaller ->pip install pyinstaller 2.查看安装的版本信息 pyinstaller -v 3.进 ...