Вы можете сериализовать на лету (через pickle
или cPickle
, как это делает shelve.py
) каждый ключ, а также каждое значение. На самом деле не стоит создавать подклассы shelve.Shelf
, так как вам придется создавать подклассы почти для каждого метода - на этот раз я бы рекомендовал скопировать shelve.py
в свой собственный модуль и отредактировать его в соответствии с требованиями. Это в основном похоже на кодирование вашего нового модуля с нуля, но вы получите рабочий пример, чтобы показать вам структуру и рекомендации; -).
sqlite
не имеет реального преимущества в достаточно общем случае (где ключи могут быть, например, произвольными кортежами, различной арности и типа для каждой записи) - вам все равно придется сериализовать ключи, чтобы сделать их однородна. Тем не менее, ничто не мешает вам использовать sqlite
, например, хранить несколько «обобщенных полок» в одном файле (разные таблицы одной и той же базы данных sqlite) - если вы заботитесь о производительности, вам следует измерять ее каждый раз.