2010-09-29 70 views
4

我正在爲一個django應用程序進行unittests。我需要數據庫中的一些數據用於測試,所以我使用了json夾具。加載燈具時django unittest出錯

我有兩場比賽:

  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。

任何想法的問題的可能原因?

感謝您的幫助

+0

你確定這是整個錯誤消息?我希望最後有一個例外說明。 – 2010-09-29 07:58:29

+0

@Gintautas:正確,對於此複製和粘貼錯誤感到抱歉。我已更新我的問題,並提供完整的錯誤消息 – luc 2010-09-29 08:33:27

回答

9

您應該使用TEST_CHARSET,但裏面的 DATABASE配置。像這樣:

DATABASES = { 
     'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'test_sbet',      
     'USER': 'test_sbet',      
     'TEST_CHARSET': 'UTF8', 
    } 
} 
1

如果這只是在測試過程中會發生,我會懷疑一些TEST_設置,如TEST_CHARSET。也許你的(常規,不測試)數據庫有一些非默認字符集?如果是這樣,你需要指定測試數據庫應該設置哪個字符集。

順便說一句,如果您使用的是舊版(前1.2版),那麼應該使用TEST_DATABASE_CHARSET來完成。

+0

Thnaks作爲答案。我正在解除Django 1.2 – luc 2010-09-29 08:34:29

+0

不幸的是TEST_CHARSET ='latin1'不能解決問題 – luc 2010-09-29 08:45:55

0

有同樣的問題。使用MySql數據庫utfmb4並添加CHARSET關鍵TEST字典幫助(Django的1.11):

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'OPTIONS': { 
      ... 
      'charset': 'utf8mb4', 
     }, 
     'TEST': {'CHARSET': 'utf8mb4',}, 
    } 
}