【问题标题】:Django testing: Got an error creating the test database: database "database_name" already existsDjango 测试:创建测试数据库时出错:数据库“database_name”已存在
【发布时间】:2019-09-05 05:00:47
【问题描述】:

我的测试有问题。这是我第一次编写测试,我遇到了一个问题。

我刚刚在我的应用程序userstest_urls.py 中创建了一个测试文件夹来测试网址。

当我输入时:

python manage.py test users

上面写着:

为别名“默认”创建测试数据库...创建时出错 测试数据库:数据库“database_name”已经存在

如果您想尝试删除测试数据库,请输入“是” 'database_name' 或 'no' 取消:

这是什么意思?如果我输入 yes 会发生什么?我会丢失数据库中的所有数据吗?

【问题讨论】:

    标签: python django database postgresql


    【解决方案1】:

    FWIW,如果您在使用 --keepdb 参数时收到此类警告,例如

    python manage.py test --keepdb [appname]
    

    那么这通常意味着Client 的多个实例被实例化,可能每个测试一个。解决方案是为测试类创建一个客户端,并在所有相应的方法中引用它,如下所示:

    from djanog.test import TestCase, Client
    
    class MyTest(TestCase):
        def setUp(self):
            self.client = Client()
    
        def test_one(self):
            response = self.client.get('/path/one/')
            # assertions
    
        def test_two(self):
            response = self.client.post('/path/two/', {'some': 'data'})
            # assertions
    

    您还可以(未经验证)使用setUpClass 类方法创建静态客户端。

    【讨论】:

      【解决方案2】:

      在测试时,Django 会创建一个测试数据库来处理,这样您的开发数据库就不会受到污染。错误消息说 Django 正在尝试创建一个名为 "database_name" 的测试数据库,并且该数据库已经存在。您应该检查您正在使用的数据库软件的表,并检查database_name中的内容,它可能是错误创建的。

      如果您键入 yes,数据库 database_name 将被删除,并且您不太可能能够恢复数据。因此,请先尝试了解发生了什么。

      您应该在settings.py 中设置测试数据库的名称。在DATABASE 设置中有一个特定的TEST dictionary

      settings.py

      ...
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.postgresql',
              'USER': 'mydatabaseuser',
              'NAME': 'mydatabase',
              'TEST': {
                  'NAME': 'mytestdatabase',
              },
          },
      }
      ...
      

      默认情况下,前缀test_ 会添加到您的开发数据库的名称中。您应该检查您的settings.py 以了解发生了什么。

      来自docs

      默认测试数据库名称是通过在DATABASES 中的每个NAME 的值前添加test_ 来创建的。使用 SQLite 时,测试将默认使用内存数据库(即,数据库将在内存中创建,完全绕过文件系统!)。 DATABASES 中的 TEST 字典提供了许多设置来配置您的测试数据库。例如,如果您想使用不同的数据库名称,请在 TEST 字典中为 DATABASES 中的任何给定数据库指定 NAME。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-16
        • 2021-07-24
        • 2020-11-17
        • 2012-04-20
        • 1970-01-01
        • 2017-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多