django - 一个 Django 应用程序/模型到多个数据库
问题描述
我在一个 Django 项目中,出于性能和路线图的原因,我需要使用 Multi-BDD 系统。
但是我有点卡住让我解释一下自己,我创建了数据库,我添加了一个路由 URL 来指定使用哪个数据库以及何时使用它。我有一个“该项目中的应用程序”和一个唯一且唯一的“数据库模型”,在我的迁移过程中,最后一个(模型)在逻辑上必须在我的所有数据库中复制。问题:
为什么当我迁移此模型时,它仅在单个数据库中迁移,而不在另一个数据库中迁移,而迁移表被复制,我无法理解为什么以及如何感谢您的反馈。先感谢您 !
这是我的settings.py
# Including le DB_Router
DATABASE_ROUTERS = ['routers.db_routers.AuthRouter',
'routers.db_routers.VIGRouter',
'routers.db_routers.VISRouter',
'routers.db_routers.DURRouter',
'routers.db_routers.IPCRouter',
]
DATABASES = {
'default': {},
'izlog': {
'ENGINE': ENGINE,
'NAME': 'izlog',
'USER': USER,
'PASSWORD': PASSWORD,
'HOST': HOST,
'PORT': PORT,
},
'db_vig': {
'ENGINE': ENGINE,
'NAME': DBSNAME['db_VIG'],
'USER': USER,
'PASSWORD': PASSWORD,
'HOST': HOST,
'PORT': PORT,
},
'db_vis': {
'ENGINE': ENGINE,
'NAME': DBSNAME['db_VIS'],
'USER': USER,
'PASSWORD': PASSWORD,
'HOST': HOST,
'PORT': PORT,
},
class VIGRouter:
route_app_labels = {'izLogApp'}
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'db_vig'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'db_vig'
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.route_app_labels:
return db == 'db_vig'
return None
class VISRouter:
route_app_labels = {'izLogApp'}
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'db_vis'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'db_vis'
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.route_app_labels:
return db == 'db_vis'
return None
这是我的模型
class log_weblinks(models.Model):
id_societe = models.CharField(max_length=32, null=True)
code_client = models.CharField(max_length=32, null=True)
date = models.DateTimeField(null=True)
log = models.CharField(max_length=32, null=True)
def __str__(self):
return self.id_societe
def readableDateCommande(self):
date_time_obj = datetime.datetime.strptime(self.date, '%Y%m%d')
return date_time_obj.strftime('%Y-%m-%d HH:MM:SS')
class connexion_log_weblinks(models.Model):
id_societe = models.CharField(max_length=32, null=True)
code_client = models.CharField(max_length=32, null=True)
date = models.DateTimeField(null=True)
log = models.CharField(max_length=32, null=True)
def __str__(self):
return self.log
def readableDateCommande(self):
date_time_obj = datetime.datetime.strptime(self.date, '%Y%m%d')
return date_time_obj.strftime('%Y-%m-%d HH:MM:SS')
解决方案
我猜你使用 pythonmanage.py migrate
来应用你的迁移。此命令仅适用于默认数据库。运行多数据库应用程序时,您需要使用--database
选项指定目标数据库。
例如 :python manage.py migrate --database db_vig
推荐阅读
- php - Woocommerce 5.4.1 - 显示不带小数的价格
- python - 通过将字符串连接到数据框列上的数学运算结果来下标列
- testing - Salesforce 中 Apex 触发器测试的必填字段缺失错误
- mediawiki - 将 Google 字体添加到 MediaWiki 皮肤
- php - woocommerce_add_to_cart_validation Ajax 中的错误
- vue.js - Vue3:当值满足特定条件时如何防止进一步输入
- python - 尝试按其字段对 JSON 进行排序会引发 TypeError
- javascript - 为什么为我的 webpack 输出使用 .cjs 扩展名会抑制源映射的生成?
- javascript - 如何调用从 API 到 HTML 的 JSON 输出?
- javascript - discord.js 如何使从数组发送文本的 forEach 等待用户的回答(awaitmessages)?