婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > django使用多個數據庫的方法實例

django使用多個數據庫的方法實例

熱門標簽:賓館能在百度地圖標注嗎 南京crm外呼系統排名 400電話 申請 條件 云南地圖標注 鄭州智能外呼系統中心 北京外呼電銷機器人招商 crm電銷機器人 汕頭電商外呼系統供應商 電銷機器人 金倫通信

通過官方文檔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 ForeignKey與數據庫的FOREIGN KEY約束詳解
  • pycharm中django框架連接mysql數據庫的方法
  • django inspectdb 操作已有數據庫數據的使用步驟
  • Python web框架(django,flask)實現mysql數據庫讀寫分離的示例
  • Django連接本地mysql數據庫(pycharm)的步驟
  • django 解決model中類寫不到數據庫中,數據庫無此字段的問題
  • Python的Django框架實現數據庫查詢(不返回QuerySet的方法)
  • django 數據庫返回queryset實現封裝為字典
  • Django項目如何給數據庫添加約束

標簽:昆明 浙江 西寧 懷化 梅州 文山 錫林郭勒盟 石家莊

巨人網絡通訊聲明:本文標題《django使用多個數據庫的方法實例》,本文關鍵詞  django,使用,多個,數據庫,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《django使用多個數據庫的方法實例》相關的同類信息!
  • 本頁收集關于django使用多個數據庫的方法實例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 乌苏市| 平安县| 芒康县| 宜阳县| 黎城县| 葵青区| 金坛市| 绍兴市| 铁岭市| 安国市| 福贡县| 绍兴县| 景谷| 望城县| 乐东| 年辖:市辖区| 富锦市| 正宁县| 伊通| 黑水县| 磴口县| 夏津县| 绥棱县| 明光市| 道真| 慈溪市| 沿河| 利津县| 滕州市| 武胜县| 龙山县| 闸北区| 来凤县| 铜山县| 诸暨市| 寿阳县| 贵溪市| 河北省| 赤城县| 青川县| 洛川县|