Django MySQL 多用户_django使用多个数据库的方法实例
通过官方文档https://docs.djangoproject.com/zh-hans/3.1/topics/db/multi-db/和csdnhttps://blog.csdn.net/songfreeman/article/details/70229839的这两篇文章可以进行多数据库的设置。但是设置后可能会出现问题,由于我连接的数据库是通过inspactdb的方法得到的model。于是在migrate的时候出现了问题,会提示 1146, “Table xxx doesn't exist” 。后来发现问题可能出在路由表上,按照DATABASE_APPS_MAPPING映射之后,django默认的表如果要写入可能会找不到数据库。而源代码里的映射关系并不包含新加入的app,例如grappelli等。
DATABASE_APPS_MAPPING = {
# example:
# 'app_name':'database_name',
# 'admin': 'default',
# 'users': 'default', #django
'basic_estate': 'basic_estate',
'footstone': 'footstone',
'mall': 'hsmall',
'iot_biz': 'iot_biz',
'mall': 'mall',
'hsuser': 'hsuser',
}
如果要解决这个问题可以修改router代码,在映射关系内找不到对应的数据库的情况下返回默认数据库连接即可:
# -*- coding: utf-8 -*-
"""
@author: obaby
@license: (C) Copyright 2013-2020, obaby@mars.
@contact: root@obaby.org.cn
@link: http://www.obaby.org.cn
http://www.h4ck.org.cn
http://www.findu.co
@file: atabase_router.py.py
@time: 2021/2/26 9:07
@desc:
"""
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 'default'
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 'default'
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
这样django系统所需的数据库就能正常创建了:
总结
到此这篇关于django使用多个数据库的文章就介绍到这了,更多相关django多数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
Django MySQL 多用户_django使用多个数据库的方法实例相关推荐
- Django MySQL 多用户_Django 框架之 同时使用多个数据库
知识点 不同app使用不同数据库 同一app使用不同数据库 简介 参考文档 不同app使用不同数据库 数据库路由 若无指定路由,则使用默认路由方案-default,确保数据的检索和保存使用defaul ...
- django mysql 名称_Django 自定义表名和字段名
通过db_table和db_column自定义数据表名和字段名 假如你的数据库里已经有了一张数据表,且该表包含多个字段,你希望通过Django直接访问该数据表的各个字段而不是重新建立新表,你这时可以通 ...
- python django前端重构_django修改models重建数据库的操作
第二次修改models.py以后再次 python manage.py makemigrations 提示如下 You are trying to add a non-nullable field ' ...
- php调用mysql库_PHP调用三种数据库的方法(1)
PHP调用三种数据库的方法(1) 更新时间:2006年10月09日 00:00:00 作者: MySQL是一个小巧灵珑的数据库服务器软件,对于中.小型应用系统是非常理想的.除了支持标准的ANSI ...
- linux python连接oracle数据库_Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法...
本文档主要描述了Linux下python数据库驱动的安装和配置,用来实现在Linux平台下通过python访问MySQL.Oracle.SQL Server数据库. 其中包括以下几个软件的安装及配置: ...
- spring mysql mongdb_Spring Boot中使用MongoDB数据库的方法
MongoDB数据库简介 简介 MongoDB是一个高性能,开源,无模式的,基于分布式文件存储的文档型数据库,由C++语言编写,其名称来源取自"humongous",是一种开源的文 ...
- python django mysql安装_Django+Nginx+uWSGI+Mysql搭建Python Web服务器
原标题:Django+Nginx+uWSGI+Mysql搭建Python Web服务器 安装的时候全部选择英文,记得以前选择中文的时候安装时出了问题,服务器组件一个不选,Ubuntu安装做的很贴心,基 ...
- django mysql 初始化_Django初始化基础(1)
1,wed项目程序工作流程 2.Django生命周期 创建Django项目 root@dev:shiyanglou_project #wokon syl (syl) root@dev:shiyanlo ...
- django mysql视图_Django框架使用mysql视图操作示例
本文实例讲述了django框架使用mysql视图操作.分享给大家供大家参考,具体如下: 一.mysql视图的创建 mysql中,在两个或者以上的基本表上创建视图,例如:在studentorm表和inf ...
- django mysql 时区_django 中的时区设置
在settings.py中设置了 TIME_ZONE = 'Asia/Shanghai' USE_TZ = True 现在的北京时间是 22点35分.django shell 中运行 timezone ...
最新文章
- 老铁 666!快手上市暴涨 200%,超 4000 员工成为千万富翁
- linux服务器last查看关机记录
- Python之路【第一篇】:Python基础(2)
- 基于netty的企业即时通讯系统的设计与实-离线消息处理
- 流言终结者- Flutter和RN谁才是更好的跨端开发方案?
- ubuntu学习摘要-ubuntu root用户
- 韩顺平php视频笔记47 函数使用
- mysql 查看autocommit_手把手教你分析Mysql死锁问题
- 为什么越有钱的人负债越多?
- Appium+Python之批量执行测试用例
- MPLS ××× Carrier Supporting Carrier Option AB(一)
- 优秀ASP.NET程序员的修炼之路(转)
- java高级-反射的三种实例化模式及与工厂,单例模式的的关系
- freemarker必须指定模板文件夹吗?
- 计蒜客-英文金曲大赛
- mysql 空串 0_casewhen遇到空串转成0
- JAVA仿微博系统(JAVA毕业设计含源码和运行教程)
- VBA解压压缩文件。
- 与现代教育技术有关的计算机知识,基于计算机的现代教育技术手段的利用与开发...
- java 跳转url_URL跳转的几种方式
热门文章
- 暴力解决配置HTTPS后无法使用Hermit
- python制作查询工具发给别人使用_Python 制作查询商品历史价格的小工具
- 悟空 mobile.php,悟空CRM无需任何权限的SQL注入漏洞2(ThinkPHP特性)
- css盒子模型实验报告总结_前端知识点总结——盒子模型
- 1053 Path of Equal Weight (30 分)一般树的遍历 DFS+vector容器+sort排序
- 软件功能测试怎么把关指标,软件测试方法经与验.doc
- h5保存图片到手机_如何快速制作一个【H5】作品?
- c语言 入字符要中文状态吗,常见的HTTP状态码深入理解
- 推桌子nyoj 220hdu1050 (贪心算法系列)
- ubuntu字符界面login_关于Ubuntu循环登陆界面