Обсудить
бизнес-задачи
блог о bi, №1 в рунете

Запуск простейшего ТГ бота и подключение его к БД MS SQL Server

С развитием современных социальных сетей и мессенджеров, появляется много возможностей для создания интерактивных приложений по мониторингу или обработке данных БД удобных и для разработчика, и для бизнес-пользователя. В этой статье мы расскажем о том, как просто подключить базу данных MS SQL к Telegram боту.

Окружение:

Windows 10
Python 3.11.4

1. Регистрация бота
1.1 Необходимо найти пользователя BotFather, нажимаем запустить, появится перечень команд нам, выбираем /newbot
1.2 Нас попросят ввести имя, а затем имя с префиксом bot.
Бот зарегистрирован, необходимо сохранить токен, по которому бот будет выходить в онлайн.
1.3 Чтобы подключить бота к группе как администратора, запускаем команду /setprivacy. Выбираем нужного бота, нажимаем disable.
Бот готов, теперь его можно найти в поиске
1.4 Создаем группу, добавляем туда бота и делаем его администратором
2. Создание виртуального окружения для проекта
2.1 Создаем пустую папку «tg_bot», заходим в нее и запускаем в ней PowerShell. Запускаем команду:

python –m venv <Имя окружения>
Должна появиться папка с окружением (изолированный python с пакетным менеджером)
2.2 Активируем окружений, для этого запускаем файл activate. Запускаем файл activate:
venv\Scripts\activate
2.3 Устанавливаем библиотеку для разработки бота командой:
pip install aiogram
2.4 Устанавливаем библиотеку для работы с БД
pip install pypyodbc
После успешной установки можно закрыть и проверить библиотеки в папке Lib\site-packegis
3. Запускаем бота
3.1 Создаем в каталоге tg_bot файл tg_bot.py
3.2 Создаем файл сценария командной строки (bat файл) для запуска бота в корневом каталоге, в него добавим токен
Открываем bat-файл любым редактором и добавляем код:
Чтобы в консоль не выводилась служебная информация самого файла

@echo off

Активируем виртуальное окружение (%~dp0 – получение текущего окружения)

call %~dp0tg_bot\venv\Scripts\activate

Заходим в папку с проектом

cd tg_bot

Задаем переменную с токеном

set TOKEN=Your TOKEN

Запуск скрипта проекта

python tg_bot.py

Чтобы увидеть ошибки в скрипте в консоли
pause
3.3 Переходим к коду проекта. Создадим простого эхо бота. В файле пишем следующий код tg_bot.py.

Импорт необходимых библиотек

from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
import os

Инициализируем бота и диспетчер

bot = Bot(token=os.getenv('TOKEN'))
dp = Dispatcher(bot)

Записываем декоратор message_handler при помощи диспетчера dp чтения сообщения

@dp.message_handler()

В декоратор поместили асинхронная функция (async def) echo_send, которая будет обрабатывать входящие сообщения (события message)

async def echo_send(message : types.Message):

Функция при появлении события message ответит (answer) тем же сообщением (message.text)

await message.answer(message.text)

Запускаем бота, skip_updates устанавливаем в True, чтобы не принимались сообщения, которые пришли во время нахождения бота оффлайн

executor.start_polling(dp, skip_updates=True)
Результат работы бота на рисунке ниже.
4. Добавляем БД.
4.1 Создаем тестовую БД DWL_BOT с одной таблицей table_test для работы с ботом:
4.2 Для работы с MS SQL ранее мы установили библиотеку pypyodbc. Добавляем следующий код для работы с библиотекой:

Импортируем библиотеку pypyodbc

import pypyodbc as po

Объявляем переменные с именем сервера и БД

myServerName = '<Имя сервера>'
myDataBaseName = '<Имя БД>'

Создаем функцию, которая обрабатывает входящие, где query – это входной параметр

def sqlcon(query='Select * from table_test'):

Прописываем подключение к БД, где прописываем драйвер (Driver), имя сервера и имя БД, при необходимости можно добавить имя пользователя и пароль.

connection = po.connect('Driver={SQL Server};'
'Server=' + myServerName + ';'
'Database=' + myDataBaseName + ';'
)

Инициализируем курсор, содержащую данные БД

cursor = connection.cursor()

Для обработки ошибок используем конструкцию try - except

try:

Отправляем запрос в БД

cursor.execute(query)

Записываем все ответы, на которые указывает курсор в переменную results

results = cursor.fetchall()

Закрываем соединение с БД

connection.close()

Выводим результат

return results
except:

Если ошибка, выводим сообщение

return 'Ошибка, поверьте запрос'

Заменяем в прошлой части кода ответ на результат вывода функции:

await message.answer(sqlcon(message.text))

Результат работы на рисунке ниже.
Далее можно дорабатывать интерфейс и улучшать функциональность как вам угодно, используя все мощности телеграмм, python и sql server