Settings.py中的这个逻辑是关于数据库冗余的吗

问题描述 投票:0回答:1

在我正在研究的 Django 项目的设置中,这就是数据库的设置方式。写这篇文章的人解释说 if 语句是多余的,对我来说没有意义。据我的理解,如果

try
失败,那么
if
也会失败,因为它们以相同的方式设置“默认”?这个 if 语句是否多余:

try:
    DATABASES = {
        'default': env.db(),
    }
except environ.ImproperlyConfigured:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }

# Override with DATABASE_URL if it exists
if env('DATABASE_URL', default=None):
    DATABASES['default'] = env.db()

如果没有,有人可以向我解释一下为什么吗?

感谢您的澄清。

我尝试过对 DATABASE_URL 使用空值,但 if 是否存在似乎并没有什么区别。

请不要给我与 ChatGPT 相同的答案,因为在两个问题之后我说它是多余的。

python python-3.x django
1个回答
0
投票

让我们逐行分解您的代码:

try:
    DATABASES = {
        'default': env.db(),
    }
except environ.ImproperlyConfigured:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }

如果

env.db()
失败,将由sqlite3数据库备份,如果失败,则
'default'
将设置为
env.db()
返回,这是数据库urlstr。

您的数据库设置可能会失败并且会引发异常,但随后您的代码将停止执行并向您显示回溯。

当您拥有

if env('DATABASE_URL', default=None):
时,已检查此环境变量,如果存在,则已将其设置为您的
'database'

TL;DR:你是对的。您可以随意删除多余的

if
语句

© www.soinside.com 2019 - 2024. All rights reserved.