Помогите с ботом telegram(inline меню) в связке с sqlite. Как реализовать?

помогите пожалуйста, примером как это реализовать или советом. Хочу из админ-панели в боте, иметь возможность добавления товара и записи всего этого в бд. Структура хранения такова: Категория . Подкатегория . . Товар И в соответствии с инфраструктурой создавалась inline клавиатура с кнопками. Какую структуру бд лучше всего будет использовать и как это все описать в python для telegram bot -а? Довольно долго уже пытаюсь, читаю,но увы. Поставьте на путь истинный пожалуйста ?


Ответы (1 шт):

Автор решения: D. Violet

Итак, если я всё верно понял, то:

import telebot
from telebot import apihelper, types
import sqlite

bot = telebot.TeleBot('TOKEN')

print(bot.get_me())

def create_db(cat, subcat, prod):
    conn = sqlite3.connect('test_db.db')
    cursor = conn.cursor()

    db_data = [(cat, subcat, prod)]
    cursor.executemany("INSERT INTO info VALUES (?, ?, ?)", db_data)  # Запись данных в БД

    conn.commit()  # Сохранение данных в БД


# Запрос данных для записи в БД
@bot.message_handler(commands=['add_db'])
def filling_db(message):
    data = bot.send_message(message.chat.id, 'Введите Категорию, Подкатегорию, Товар')
    bot.register_next_step_handler(data, filling_db_2)


def filling_db_2(message):
    text = message.text.split(',')
    cat = text[0]
    subcat = text[1]
    prod = text[2]
    bot.send_message(message.chat.id, 'Категория: {}\n Подкатегория: {}\n Товар: {}'
                     .format(cat, subcat, prod))

    create_db(cat, subcat, prod)

    bot.send_message(message.chat.id, 'клавиатура - /lala')


@bot.message_handler(commands=['lala'])
def filling_db_3(message):
    conn = sqlite3.connect('test_db.db')
    cursor = conn.cursor()

    cat = ''
    subcat = ''
    prod = ''

    for row in cursor.execute("SELECT * FROM info"):
        cat = list(row)[0]
        subcat = list(row)[1]
        prod = list(row)[2]

    db_keyboard = types.InlineKeyboardMarkup()
    db_cat_k = types.InlineKeyboardButton(text=cat, callback_data='db_cat')
    db_subcat_k = types.InlineKeyboardButton(text=subcat, callback_data='db_subcat')
    db_prod_k = types.InlineKeyboardButton(text=prod, callback_data='db_prod')
    db_keyboard.add(db_cat_k, db_subcat_k, db_prod_k)
    bot.send_message(message.chat.id, 'Выберите:', reply_markup=db_keyboard)

строчка с cursor.execute("SELECT * FROM info") для самостоятельного изучения, понять как выбирать нужные данные. в примере клавиатура будет содержать последнюю строку данных из БД.

для просмотра БД sqlite можно воспользоваться DB Browser for SQLite

→ Ссылка