Как использовать кеширование MySQL в telebot-python?

Как избавиться от старых данных в таблице после её удаления?
  • 17 декабря 2023 г. 21:37
Ответы на вопрос 2
В telebot-python нет встроенной поддержки кеширования данных MySQL. Однако, вы можете реализовать кеширование самостоятельно, используя сторонние библиотеки, такие как `redis` или `memcached`. 

Вот пример использования `redis` для кеширования данных MySQL в telebot-python:

```python
import telebot
import mysql.connector
import redis

# Подключение к MySQL
conn = mysql.connector.connect(
    host="localhost",
    user="your_username",
    password="your_password",
    database="your_database"
)

# Подключение к Redis
redis_client = redis.Redis(host='localhost', port=6379, db=0)

# Создание бота
bot = telebot.TeleBot("YOUR_TOKEN")

# Функция для получения данных из MySQL с кешированием
def get_data_from_mysql(key):
    # Проверяем наличие данных в кэше
    if redis_client.exists(key):
        # Если данные есть в кэше, возвращаем их
        return redis_client.get(key)
    else:
        # Если данных нет в кэше, получаем их из MySQL
        cursor = conn.cursor()
        cursor.execute("SELECT data FROM your_table WHERE key=%s", (key,))
        result = cursor.fetchone()
        cursor.close()
        if result:
            # Если данные найдены в MySQL, сохраняем их в кэше
            redis_client.set(key, result[0])
            return result[0]
        else:
            return None

# Обработка команды /data
@bot.message_handler(commands=['data'])
def get_data(message):
    key = message.text.split()[1]
    data = get_data_from_mysql(key)
    if data:
        bot.reply_to(message, f"Data for key {key}: {data}")
    else:
        bot.reply_to(message, f"No data found for key {key}")

# Функция для удаления данных из MySQL и кэша
def delete_data_from_mysql(key):
    cursor = conn.cursor()
    cursor.execute("DELETE FROM your_table WHERE key=%s", (key,))
    conn.commit()
    cursor.close()
    redis_client.delete(key)

# Обработка команды /delete
@bot.message_handler(commands=['delete'])
def delete_data(message):
    key = message.text.split()[1]
    delete_data_from_mysql(key)
    bot.reply_to(message, f"Deleted data for key {key}")

# Запуск бота
bot.polling()
```

Чтобы удалить старые данные из таблицы после её удаления, вам необходимо использовать оператор `DELETE`. Пример кода функции `delete_data_from_mysql` приведен выше, который удаляет данные из таблицы `your_table` с заданным ключом и затем удаляет данные из кэша Redis с использованием метода `delete`.
Бл... Я забыл поменять данные для подключения с тестовой таблицы на основную... Решено
Похожие вопросы