这是我Settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'account',
'USER': 'xxxx',
'PASSWORD': 'xxxx',
'HOST': 'localhost',
'PORT': '3306'
}
}
我的数据库有多个模式,例如帐户,登录,通知等。
当我做一个python manage.py inspectdb时,我只得到" account"中的表的类。 schema,但我想要所有模式的类。
我尝试了python manage.py inspectdb --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.py inspectdb --database=login
时获得了正确的表登录类。但是,问题是,如果这应该是程序,我必须在DATABASES
选项中做一个选项,这将变得非常长,因为我有超过15个模式,我不确定是否正在做这将是一件好事。
所以,我想知道这样做的正确方法是什么。
我在Django 1.10.5上。
答案 0 :(得分:1)
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)