Ошибка в модуле django unittest при загрузке фикстуры

Я делаю модульные тесты для приложения django. Мне нужны данные в базе данных для моих тестов, поэтому я использую приспособление json.

У меня два приспособления:

  1. для пользователей, и он работает нормально.
  2. для некоторых веб-страниц

Приспособление 2 вызывает следующую ошибку:

Problem installing fixture 'C:\Users\luc\Dev\Hg\mnl-adminpub\website\fixtures\website-unittest.json': Traceback (most recent call last):
  File "C:\Python26\lib\site-packages\django\core\management\commands\loaddata.py", line 169, in handle
    obj.save(using=using)
  File "C:\Python26\lib\site-packages\django\core\serializers\base.py", line 165, in save
    models.Model.save_base(self.object, using=using, raw=True)
  File "C:\Python26\lib\site-packages\django\db\models\base.py", line 528, in save_base
    result = manager._insert(values, return_id=update_pk, using=using)
  File "C:\Python26\lib\site-packages\django\db\models\manager.py", line 195, in _insert
    return insert_query(self.model, values, **kwargs)
  File "C:\Python26\lib\site-packages\django\db\models\query.py", line 1479, in insert_query
    return query.get_compiler(using=using).execute_sql(return_id)
  File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py", line 783, in execute_sql
    cursor = super(SQLInsertCompiler, self).execute_sql(None)
  File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py", line 727, in execute_sql
    cursor.execute(sql, params)
  File "C:\Python26\lib\site-packages\django\db\backends\mysql\base.py", line 86, in execute
    return self.cursor.execute(query, args)
  File "C:\Python26\lib\site-packages\MySQLdb\cursors.py", line 173, in execute
    self.errorhandler(self, exc, value)
  File "C:\Python26\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
OperationalError: (1366, "Incorrect string value: '\\xE2\\x80\\xA8<br...' for column 'html' at row 1")

Я создал приспособление с помощью dumpdata. Я тестировал его с loaddata, и он отлично работает. Я использую mysql.

Есть идеи о возможной причине проблемы?

Спасибо за вашу помощь


person luc    schedule 29.09.2010    source источник
comment
Вы уверены, что это все сообщение об ошибке? Я надеялся на описание исключения в конце.   -  person Gintautas Miliauskas    schedule 29.09.2010
comment
@Gintautas: Верно, извините за эту ошибку копирования и вставки. Я обновил свой вопрос полным сообщением об ошибке   -  person luc    schedule 29.09.2010


Ответы (3)


Вы должны использовать TEST_CHARSET, но внутри Конфигурация БАЗЫ ДАННЫХ. Как это:

DATABASES = {
      'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test_sbet',                      
        'USER': 'test_sbet',                      
        'TEST_CHARSET': 'UTF8',
    }
}
person Tony Larin    schedule 11.01.2012

Если это произойдет только во время тестирования, я бы заподозрил некоторые из настроек TEST_, например TEST_CHARSET. Может быть, ваш (обычный, а не тестовый) db имеет кодировку, отличную от кодировки по умолчанию? Если это так, вам необходимо указать, с какой кодировкой должна быть настроена тестовая база данных.

Кстати, если вы используете более старую (до 1.2) версию, то это следует сделать с помощью TEST_DATABASE_CHARSET.

person Ofri Raviv    schedule 29.09.2010
comment
Спасибо за ответ. Я не использую Django 1.2 - person luc; 29.09.2010
comment
К сожалению, TEST_CHARSET = 'latin1' не решает проблему - person luc; 29.09.2010

Была такая же проблема. Использование utfmb4 в базе данных MySql и добавление ключа CHARSET в словарь TEST помогли (Django 1.11):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            ...
            'charset': 'utf8mb4',
        },
        'TEST': {'CHARSET': 'utf8mb4',},
    }
}
person Kirill Zinovjev    schedule 24.04.2017