Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中的测试数据库可访问性_Python_Django_Postgresql - Fatal编程技术网

Python Django中的测试数据库可访问性

Python Django中的测试数据库可访问性,python,django,postgresql,Python,Django,Postgresql,我的问题和我的问题很相似 我刚刚开始学习Django,我发现自己随时都在尝试学习它的工作原理,只要我有空闲时间和笔记本电脑可用。我发现Heroku是一个测试东西的好地方,但是如果我在等着接孩子或者类似的事情,我就不能总是上网。在开发中,我想创建一个测试来检查数据库是否可以访问。如果没有,则故障转移到SQLite DB 我从大量借用的代码开始: 我只是在设置DATABASES变量后立即弹出该代码。但这也有一些弱点。最引人注目的是AWS(Heroku使用的)不响应ping,除非您专门启用它们。老实说

我的问题和我的问题很相似

我刚刚开始学习Django,我发现自己随时都在尝试学习它的工作原理,只要我有空闲时间和笔记本电脑可用。我发现Heroku是一个测试东西的好地方,但是如果我在等着接孩子或者类似的事情,我就不能总是上网。在开发中,我想创建一个测试来检查数据库是否可以访问。如果没有,则故障转移到SQLite DB

我从大量借用的代码开始:

我只是在设置DATABASES变量后立即弹出该代码。但这也有一些弱点。最引人注目的是AWS(Heroku使用的)不响应ping,除非您专门启用它们。老实说,如果你没有必要,为什么要让事情变得不那么安全呢

因此,为了不重新发明轮子,这让我提出了一个问题:有人创造了一种方法来检查Django DB是否可以访问吗

我真的只需要检查博士后。但我真的很想找到一个通用的解决方案,所以如果你能给我指出一个只适用于博士后的解决方案,那就给我一半的学分


编辑:为了澄清,互联网本身可能是可用的,但必要的端口可能会被防火墙阻止。很难知道什么是可用的

这并不是在Heroku和本地开发人员机器之间管理数据库设置的真正方法

Heroku通过环境变量管理所有这些设置,这是。他们还制作了一个Django库,用于读取这些环境变量并自动适当地配置设置


您应该将其用于数据库设置,然后可以使用本地sqlite3数据库的地址设置本地env var
database\u URL
。然后,您的应用程序将自动在开发和生产环境中运行,并将自身配置为自动指向相关数据库。

OPs的问题是如何让它根据可用性自动检测要连接到的数据库。你的答案是他应该忘记这一点并使用env变量手动配置吗?我不相信这实际上解决了我关于基于可用性选择的问题。我想Daniel的答案是正确的。自动故障切换的想法很好,但是当启动线程时,
pingable()
只会被调用一次。如果您想在每次设置与数据库的连接时都运行此函数,则运行速度会非常慢。@Bjorn:这真的不是问题,因为这是我们讨论的仅用于开发的环境。稍微慢一点的问题比花一分钟编辑设置要小得多,因为你可能只有一分钟的时间。
def pingable(hostname):
    try:
        return os.system("ping -c 1 " + hostname  + " > /dev/null 2>&1") == 0
    except:
        return False

if (not pingable(DATABASES['default']['HOST'])):
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }