Выбрать тестовую базу данных?

Я пытаюсь работать

./manage.py test

Но это говорит мне

Получил ошибку при создании тестовой базы данных: разрешение, отклоненное для создания базы данных

Очевидно, это не имеет разрешения создать базу данных, но я нахожусь на общем сервере, таким образом, нет очень, я могу сделать об этом. Я могу создать новую базу данных через панель управления, но я не думаю, что существует любой способ, которым я могу позволить Django сделать это автоматически.

Так, разве я не могу создать тестовую базу данных вручную и вместо этого сказать Django сбрасывать ее каждый раз, вместо того, чтобы воссоздавать все это?

19
задан mpen 23 July 2010 в 17:43
поделиться

2 ответа

Измените следующие методы в django / db / backends / creation.py :

def _destroy_test_db(self, test_database_name, verbosity):
    "Internal implementation - remove the test db tables."

    # Remove the test database to clean up after
    # ourselves. Connect to the previous database (not the test database)
    # to do so, because it's not allowed to delete a database while being
    # connected to it.
    self._set_test_dict()
    cursor = self.connection.cursor()
    self.set_autocommit()
    time.sleep(1) # To avoid "database is being accessed by other users" errors.

    cursor.execute("""SELECT table_name FROM information_schema.tables WHERE table_schema='public'""")
    rows = cursor.fetchall()
    for row in rows:
        try:
            print "Dropping table '%s'" % row[0]
            cursor.execute('drop table %s cascade ' % row[0])
        except:
            print "Couldn't drop '%s'" % row[0] 

    #cursor.execute("DROP DATABASE %s" % self.connection.ops.quote_name(test_database_name))
    self.connection.close()

def _create_test_db(self, verbosity, autoclobber):
    "Internal implementation - creates the test db tables."

    suffix = self.sql_table_creation_suffix()

    if self.connection.settings_dict['TEST_NAME']:
        test_database_name = self.connection.settings_dict['TEST_NAME']
    else:
        test_database_name = TEST_DATABASE_PREFIX + self.connection.settings_dict['NAME']

    qn = self.connection.ops.quote_name

    # Create the test database and connect to it. We need to autocommit
    # if the database supports it because PostgreSQL doesn't allow
    # CREATE/DROP DATABASE statements within transactions.
    self._set_test_dict()
    cursor = self.connection.cursor()
    self.set_autocommit()

    return test_database_name

def _set_test_dict(self):
    if "TEST_NAME" in self.connection.settings_dict:
        self.connection.settings_dict["NAME"] = self.connection.settings_dict["TEST_NAME"]
    if "TEST_USER" in self.connection.settings_dict:
        self.connection.settings_dict['USER'] = self.connection.settings_dict["TEST_USER"]
    if "TEST_PASSWORD" in self.connection.settings_dict:
        self.connection.settings_dict['PASSWORD'] = self.connection.settings_dict["TEST_PASSWORD"]

Кажется для работы ... просто добавьте дополнительные настройки в свой settings.py , если они вам нужны.

0
ответ дан 30 November 2019 в 03:43
поделиться

Я думаю, что лучшим решением могло бы быть определение вашего собственного средства выполнения тестов .

4
ответ дан 30 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: