gpt4 book ai didi

python - 如何在django中使用inspectdb进行多个mysql模式?

转载 作者:行者123 更新时间:2023-11-29 11:03:23 25 4
gpt4 key购买 nike

这是我的 Settings.py 中的 DATABASES 字典

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'account',
'USER': 'xxxx',
'PASSWORD': 'xxxx',
'HOST': 'localhost',
'PORT': '3306'
}
}

我的数据库有多个模式,例如帐户、登录、通知等。当我执行 python Manage.py InspectDB 时,我只获取“account”模式中表的类,但我想要所有模式的类。我尝试执行 python manage.pyspectdb --database=login,但出现 django.db.utils.ConnectionDoesNotExist 异常

但是,如果我将设置更改为

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'account',
'USER': 'xxxx',
'PASSWORD': 'xxxx',
'HOST': 'localhost',
'PORT': '3306'
},
'login': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'login',
'USER': 'xxxx',
'PASSWORD': 'xxxx',
'HOST': 'localhost',
'PORT': '3306'
},
}

在执行python manage.pyspectdb --database=login时,我获得了表登录的正确类。但是,问题是,如果这应该是过程,我必须在 DATABASES 选项中创建一个选项,该选项会变得非常长,因为我有超过 15 个模式,而我不是确定这样做是否是一件好事。

所以,我想知道这样做的正确方法是什么。

我使用的是 Django 1.10.5。

最佳答案

Django 需要知道如何访问您的每个数据库,因此您将无法避免在 DATABASES 设置中声明它们。如果您唯一担心的是会失去可读性,您可以创建一个辅助函数来消除重复。

例如:

def local_db(name):
return {
'ENGINE': 'django.db.backends.mysql',
'NAME': name,
'USER': 'xxxx',
'PASSWORD': 'xxxx',
'HOST': 'localhost',
'PORT': '3306',
}

DATABASES = {
'default': local_db('account'),
'login': local_db('login'),
# Etc.
}

如果您想一次检查所有数据库,您可以创建一个自定义命令来执行此操作。

例如:

from django.conf import settings
from django.core.management.commands.inspectdb import Command as BaseCommand


class Command(BaseCommand):
def handle(self, **options):
for db_name in settings.DATABASES:
options['database'] = db_name
self.stdout.write('# Generated while inspecting database %s\n' % db_name)
super().handle(**options)

关于python - 如何在django中使用inspectdb进行多个mysql模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41826755/

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