Как реализовать таблицу в стиле базы данных в Python

Я реализую класс, который напоминает типичную таблицу базы данных:

  • имеет именованные столбцы и безымянные строки
  • имеет первичный ключ, по которому я могу ссылаться на строки
  • поддерживает поиск и назначение по первичному ключу, а заголовок столбца
  • может быть запрошен добавить уникальный или неуникальный индекс для любого из столбцов, что позволяет быстро получить строка (или набор строк), которые имеют заданное значение в этом столбце
  • , удаление строки происходит быстро и реализуется как «мягкое удаление»: строка сохраняется физически, но помечена для удаления и не будет появляются в любых последующих операциях поиска
  • добавление столбца происходит быстро
  • строки добавляются редко
  • столбцы редко удаляются

Я решил реализовать класс напрямую, а не использовать оболочку вокруг sqlite.

Какую структуру данных лучше использовать?


В качестве примера, один из подходов, о которых я думал, - это словарь. Его ключи - это значения в столбце первичного ключа таблицы; его значения - это строки, реализованные одним из следующих способов:

  1. В виде списков. Номера столбцов отображаются в заголовках столбцов (с использованием списка для одного направления и карты для другого). Здесь операция поиска сначала преобразует заголовок столбца в номер столбца, а затем находит соответствующий элемент в списке.

  2. Как словари.Заголовки столбцов являются ключами этого словаря.

Не уверен в плюсах и минусах обоих.


Причины, по которым я хочу написать свой собственный код:

  • Мне нужно отслеживать удаления строк. То есть в любое время я хочу иметь возможность сообщить, какие строки были удалены и по какой «причине» («причина» передается моему методу удаления).
  • Мне нужны отчеты во время индексирования (например, пока создается неуникальный индекс, я хочу проверить определенные условия и сообщить, если они нарушены)
6
задан Brian Tompsett - 汤莱恩 22 March 2017 в 18:30
поделиться