gpt4 book ai didi

python - 从 BinaryField 使用 unicode 记录 sql 时出现 Django UnicodeEncodeError

转载 作者:行者123 更新时间:2023-12-01 07:47:32 25 4
gpt4 key购买 nike

Django 1.11、Python 3.5、Windows 操作系统

我有一个带有 BinaryField 的 Django 模型。当我将模型实例保存到数据库时,Django 打印出如下错误消息:

UnicodeEncodeError: 'charmap' codec can't encode character '\ufffd' in position 216: character maps to <undefined>

回溯的最后一行表明错误发生在 django.db.backends.utils.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_log.append({
'sql': sql,
'time': "%.3f" % duration,
})
##### Error is reported from the logger.debug statement
logger.debug(
'(%.3f) %s; args=%s', duration, sql, params,
extra={'duration': duration, 'sql': sql, 'params': params}
)

所以我认为发生的情况是,当 Django 尝试打印 SQL 插入语句时,它遇到了不可打印的 Unicode 字符并抛出错误。我不想在开发时禁用 Django 调试日志记录(当然,它在生产中被禁用)。有什么办法可以解决这个问题吗?

最佳答案

将日志处理程序的编码设置为 utf-8 似乎可行。如果有更好的方法请指教。

LOGGING = {
# other config omitted
'handlers': {
'django-debug': {
'level': 'DEBUG',
'class':'logging.FileHandler',
'filename': os.path.join(LOCAL_LOGGING_PATH,'django-debug.log'),
'formatter': 'standard',
'encoding':'utf8', # this fixes UnicodeEncodeError
}
}
}
<小时/>

我尝试过的事情不起作用。这些仍然会产生 UnicodeEncodeError:

  • 在settings.py顶部添加from __future__ import unicode_literals

  • 按照 python 3 logging cookbook 的建议将字节顺序标记 (BOM) 字符\ufeff 添加到格式化程序中

  • 在日志格式化程序中使用 %r 而不是 %s

  • 在格式化程序上使用 python unicode 字符串'format': u'%(asctime)-s %(levelname)s [%(name)s]: %(message)s', 然后按照 this thread 中的建议 logging._defaultFormatter =logging.Formatter(u"%(message)s")

关于python - 从 BinaryField 使用 unicode 记录 sql 时出现 Django UnicodeEncodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56389666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com