Как @SuperShoot упоминает в своем ответе, pymemcache
ожидает хранить представление str
.Поскольку ваш экземпляр (запись) модели SQLAlchemy изначально не является представлением str
, pymemcache
пытается вызвать метод по умолчанию __str__()
, который приводит к нежелательному результату.
Вам нужен промежуточный шаг, которыйбудет сериализовать ваш экземпляр модели SQLAlchemy в str
той или иной структуры.Это делает ваш логически циклически переключаемый поток:
- Сериализуйте экземпляр вашей модели в
str
той или иной структуры. - Сохраните сериализованный
str
, используя pymemcache
. - При извлечении
str
из pymemcache
десериализовайте его в экземпляр модели SQLAlchemy, чтобы продолжить с ним легко работать в коде Python.
Это может бытьНемного сложнее с моделями SQLAlchemy, поэтому я рекомендую использовать библиотеку SQLAthanor (полное раскрытие: я автор).Он позволяет вам сериализовать вашу модель SQLAlchemy в CSV, JSON или YAML, которую затем можно сохранить в memcache.Кроме того, он также позволяет легко десериализовать строку CSV, JSON или YAML в экземпляр модели SQLAlchemy, что позволяет легко поддерживать весь поток, описанный выше.
В библиотеке гораздо больше функциональности, котораявы можете прочитать на странице документации: https://sqlathanor.readthedocs.io/en/latest/
Важно помнить, что при использовании SQLAthanor вам нужно будет решить, в каком формате вы хотите хранить свои данные (я рекомендую JSON или YAML), а затем явно сконфигурируйте столбцы / атрибуты, которые вы хотите сериализовать в этот формат (это функция безопасности в библиотеке).Поскольку ваш фрагмент кода показывает, что вы используете декларативное отражение, вы, вероятно, захотите взглянуть на следующие разделы документации по настройке SQLAthanor:
Надеюсь, это поможет!