濮阳杆衣贸易有限公司

主頁 > 知識庫 > django使用多個數(shù)據(jù)庫的方法實例

django使用多個數(shù)據(jù)庫的方法實例

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

通過官方文檔https://docs.djangoproject.com/zh-hans/3.1/topics/db/multi-db/和csdnhttps://blog.csdn.net/songfreeman/article/details/70229839的這兩篇文章可以進行多數(shù)據(jù)庫的設(shè)置。但是設(shè)置后可能會出現(xiàn)問題,由于我連接的數(shù)據(jù)庫是通過inspactdb的方法得到的model。于是在migrate的時候出現(xiàn)了問題,會提示 1146, “Table xxx doesn't exist” 。后來發(fā)現(xiàn)問題可能出在路由表上,按照DATABASE_APPS_MAPPING映射之后,django默認的表如果要寫入可能會找不到數(shù)據(jù)庫。而源代碼里的映射關(guān)系并不包含新加入的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代碼,在映射關(guān)系內(nèi)找不到對應(yīng)的數(shù)據(jù)庫的情況下返回默認數(shù)據(jù)庫連接即可:

# -*- 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系統(tǒng)所需的數(shù)據(jù)庫就能正常創(chuàng)建了:

總結(jié)

到此這篇關(guān)于django使用多個數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)django多數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Django ForeignKey與數(shù)據(jù)庫的FOREIGN KEY約束詳解
  • pycharm中django框架連接mysql數(shù)據(jù)庫的方法
  • django inspectdb 操作已有數(shù)據(jù)庫數(shù)據(jù)的使用步驟
  • Python web框架(django,flask)實現(xiàn)mysql數(shù)據(jù)庫讀寫分離的示例
  • Django連接本地mysql數(shù)據(jù)庫(pycharm)的步驟
  • django 解決model中類寫不到數(shù)據(jù)庫中,數(shù)據(jù)庫無此字段的問題
  • Python的Django框架實現(xiàn)數(shù)據(jù)庫查詢(不返回QuerySet的方法)
  • django 數(shù)據(jù)庫返回queryset實現(xiàn)封裝為字典
  • Django項目如何給數(shù)據(jù)庫添加約束

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

巨人網(wǎng)絡(luò)通訊聲明:本文標題《django使用多個數(shù)據(jù)庫的方法實例》,本文關(guān)鍵詞  django,使用,多個,數(shù)據(jù)庫,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《django使用多個數(shù)據(jù)庫的方法實例》相關(guān)的同類信息!
  • 本頁收集關(guān)于django使用多個數(shù)據(jù)庫的方法實例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    佛教| 西丰县| 岳西县| 肃北| 青田县| 湘潭市| 钟山县| 无锡市| 台南县| 炎陵县| 连南| 承德市| 富蕴县| 怀柔区| 屏东县| 民勤县| 定州市| 监利县| 同仁县| 定边县| 阿拉善左旗| 成武县| 清徐县| 呼图壁县| 区。| 清涧县| 蓬莱市| 娱乐| 西乌| 临安市| 临汾市| 康马县| 宝应县| 屏山县| 边坝县| 松滋市| 本溪| 浦东新区| 横山县| 会宁县| 偏关县|