Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Django SQL日志记录为UTF-8:在设置时避免UnicodeDecodeError.DEBUG=True_Django_Unicode_Django Models_Utf 8 - Fatal编程技术网

Django SQL日志记录为UTF-8:在设置时避免UnicodeDecodeError.DEBUG=True

Django SQL日志记录为UTF-8:在设置时避免UnicodeDecodeError.DEBUG=True,django,unicode,django-models,utf-8,Django,Unicode,Django Models,Utf 8,很长一段时间以来,在保存模型时,我一直在努力解决“UnicodeDecodeError:ascii编解码器无法解码…”错误,直到我“意外”设置了设置。DEBUG=False。然后我意识到Unicode异常不是来自我的数据,也不是来自我的代码,而是来自Django的SQL日志,它显然是ascii格式的 问题是,有没有一种简单的方法将日志记录从ascii转换为utf-8,这样我就可以在不处理异常的情况下仍然使用日志记录功能 非常感谢! =)我发现了一个似乎暂时有效的黑客程序。在django/db/b

很长一段时间以来,在保存模型时,我一直在努力解决“UnicodeDecodeError:ascii编解码器无法解码…”错误,直到我“意外”设置了设置。DEBUG=False。然后我意识到Unicode异常不是来自我的数据,也不是来自我的代码,而是来自Django的SQL日志,它显然是ascii格式的

问题是,有没有一种简单的方法将日志记录从ascii转换为utf-8,这样我就可以在不处理异常的情况下仍然使用日志记录功能

非常感谢!
=)

我发现了一个似乎暂时有效的黑客程序。在django/db/backends/util.py中:

class CursorDebugWrapper(CursorWrapper):

    # XXX callproc isn't instrumented at this time.

    def execute(self, sql, params=None):
        start = time()
        try:
            return super(CursorDebugWrapper, self).execute(sql, params)
        finally: 
            stop = time()
            duration = stop - start
            sql = self.db.ops.last_executed_query(self.cursor, sql, params)
            self.db.queries.append({
                'sql': sql,
                'time': "%.3f" % duration,
             })
            logger.debug('(%.3f) %s; args=%s' % (duration, sql, params),
                extra={'duration': duration, 'sql': sql, 'params': params}
            )
我将最后一行更改为:

            logger.debug('(%.3f) %s; args=%s' % (duration, sql.decode('utf-8'), params),
                extra={'duration': duration, 'sql': sql, 'params': params}
            )

如果有人能提供更好/更优雅的解决方案,那就太好了。

使用定制的logger类怎么样?见: