У меня есть тип модели Expando в моем хранилище данных App Engine, и я задаю много произвольных имен свойств. Я не считал, что не могу хранить имена свойств Unicode, и теперь я нахожусь в тревожной ситуации, когда любая попытка получить объекты такого рода или даже удалить их, чтобы избавиться от нарушителя, приводит к следующей ошибке:
Traceback (most recent call last):
File "/base/data/home/apps/APP/1-05.335746938130078870/console/app/models/console.py", line 146, in processSource
exec bytecode in statement_module.__dict__
File "<string>", line 1, in <module>
File "/base/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 1461, in fetch
return [self._model_class.from_entity(e) for e in raw]
File "/base/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 1047, in from_entity
entity_values = cls._load_entity_values(entity)
File "/base/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 1347, in _load_entity_values
entity_values[str(key)] = value
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in position 5: ordinal not in range(128)
Теперь я изменил свой код для кодирования имен этих свойств в ascii до их сохранения, но уже слишком поздно! Поскольку существует хотя бы одна сущность с именем свойства в Unicode, я не могу получить эту сущность или удалить ее, и это означает, что средство просмотра хранилища данных возвращает «Произошла ошибка сервера». ошибка, поэтому я даже не вижу, где проблема.
Единственное, о чем я могу думать - это разбудить модуль db и изменить метод str (), но мне было бы намного проще найти способ стереть эту модель, или даже лучше, чтобы иметь возможность удалить нарушившую сущность (или сущности), не избавляясь от всех действительных.