gpt4 book ai didi

django使用多个数据库的方法实例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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等.

?
1
2
3
4
5
6
7
8
9
10
11
12
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代码,在映射关系内找不到对应的数据库的情况下返回默认数据库连接即可:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# -*- 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多数据库内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:http://h4ck.org.cn/2021/03/django使用多个数据库 。

最后此篇关于django使用多个数据库的方法实例的文章就讲到这里了,如果你想了解更多关于django使用多个数据库的方法实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com