В настоящее время я немного разбираюсь в SQLAlchemy, что действительно довольно аккуратно.
Для тестирования я создал огромную таблицу, содержащую архив моих фотографий, проиндексированный хешами SHA1 (чтобы удалить дубликаты:-)). Что было впечатляюще быстро...
Для удовольствия я сделал эквивалент select *
по полученной базе данных SQLite:
session = Session()
for p in session.query(Picture):
print(p)
Я ожидал увидеть прокрутку хэшей, но вместо этого он просто продолжал сканировать диск. В то же время использование памяти резко увеличилось, достигнув 1 ГБ через несколько секунд. Это, похоже, исходит из функции идентификационной карты SQLAlchemy, которая, как я думал, только сохраняла слабые ссылки.
Может кто-нибудь объяснить это мне? Я думал, что каждое изображение p будет собрано после того, как будет выписан хэш!?