我希望这将类似于之前回答的几个问题。
我想知道在 Django 中测试当前连接的数据库的数据库连接字符串(不是数据库名称(的完整过程是什么?我看到了一些打印名称的方法,但在本地开发和暂存中,这些名称将是相同的。我需要了解更多,例如数据库引擎(例如,它是PostgreSQL
,还是db.sqlite3
.等等(,以及各种其他数据库参数。
我目前正在尝试调试为什么 Celery 节拍任务无法为我认为我连接到的应用程序数据库创建数据库条目。
我正在执行一个简单的obj, created = Object.objects.get_or_create()
DB方法,在日志记录created
,有些是True
的,有些是False
的。到目前为止一切都很好。
但是,Django CMS 的管理部分没有向数据库显示更多条目。
我相信测试 Django 应用程序正在使用的数据库的位置和连接字符串可能有助于调试这个幻影对象的创建......除非有人可以就他们在 Celery 守护程序上遇到的类似问题提供建议,否则实际上并没有保留数据库创建/更新等......
也许,诸如:
from django.db import connection
print(connection.settings_dict)
就够了?
因此,以下内容对于确定数据库引擎很有用:
from django.db import connection
print(connection.settings_dict)
为了获得有用的指导,connection.settings_dict
包含以下结构:
{
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/usr/src/app/db.sqlite3',
'ATOMIC_REQUESTS': False,
'AUTOCOMMIT': True,
'CONN_MAX_AGE': 0,
'OPTIONS': {},
'TIME_ZONE': None,
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
'TEST': {
'CHARSET': None,
'COLLATION': None,
'NAME': None,
'MIRROR': None
}
}
因此,我们可以在管理命令中使用类似的东西:
from django.db import connection
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = 'Displays The Currently Connected DB Settings'
def handle(self, *args, **kwargs):
print(
"The current database engine is {ENGINE}".format(**connection.settings_dict)
)
print(
"Currently connected to host {HOST} on port {PORT} ".format(**connection.settings_dict)
)