База данных - VK-SDK-DEV/VK-SDK GitHub Wiki

VK-SDK предоставляет иструменты для быстрого развертывания базы данных sqlite с автоматическими миграциями.


Объявление структур

Структуры представляют собой таблицы в базе данных. Пример структуры:

class User(Struct):
     user_id = ""
     balance = 0
     save_by = "user_id"

Обычно структуры лежат в папке Structs/. Однако, куда их положить - ваш выбор. save_by - ключ, по которому будет производиться сохранение и получение структуры, также может быть и списком из ключей, например:

class Order(Struct):
     user_id = ""
     order_id = ""
     save_by = ["user_id", "order_id"]

или

class Cart(Struct):
     user_id = ""
     product_name = ""
     count = 0
     save_by = ["user_id", "product_name"]

Обратите внимание, что все структуры должны наследоваться от класса Struct Опционально к структуре можно добавить поле table_name для явного задания имени таблицы.
Обычно имена таблиц преобразуются в змеиный_кейс (все буквы с маленькой буквы, пробелы меняется на "_")

Создание и получение записей

Чтобы получить структуру, нужно в одном из методов получения структур передпть все параметры, указанные структурой как save_by
Экземпляр основной базы данных находится в self.db в классе бота.

Способы получения структур:

  • self.db.select_one_struct("строка с sql", ["параметры"]) - получение одной структуры по SQL-like строке
  • self.db.select_all_structs("строка с sql", ["параметры"]) - получение всех структур по SQL-like строке
  • Struct(save_by1 = "", create_new=False) - (пример, User(user_id=self.user.id, create_new=False)) - получение структуры без SQL строки
  • Struct.select_all(save_by1 = "", create_new=False) - (пример, User.select_all(balance=0, create_new=False)) - получение всех структур без SQL строки

Обратите внимание, что если позиционный аргумент create_new не указан или равен True, будет создаваться новая запись о структуре с параметрами, переданными в конструктор структуры.

Также возможны прямые коммуникации с дб через методы:

  • select_one(query, args) - выбор одной записи
  • select(query, args) - выбор всех записей
  • execute(query, args) - выполнение операции с дб. Не дает результата.