Telegram-бот на Python: SQLite3 — подключение к базе данных

Этот урок описывает создание Telegram-бота, взаимодействующего с базой данных SQLite3. Выбор SQLite3 обусловлен простотой настройки и использования. Аналогичный подход применим к другим базам данных, поддерживаемым Python (MySQL, PostgreSQL, MongoDB и др.).

Подключение к SQLite3

SQLite3 – встроенная база данных Python, поэтому дополнительная установка не требуется. Для подключения используется импорт: import sqlite3.

Создание базы данных и таблицы

Обработчик команды /start создает базу данных и таблицу для хранения информации о пользователях.

Декоратор для обработки команды /start:

@bot.message_handler(commands=['start'])
def start(message):
    # ...

Создание соединения с базой данных:

conn = sqlite3.connect('proger.sqlite3') # Имя файла базы данных может быть любым
cursor = conn.cursor()

Создание таблицы users:

cursor.execute("""
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name VARCHAR(50),
        pass VARCHAR(50)
    )
""")
conn.commit()  # Сохранение изменений
conn.close()   # Закрытие соединения

После выполнения команды /start создается файл proger.sqlite3 (или файл с указанным именем) с таблицей users, содержащей поля id, name и pass. Таблица создаётся только при отсутствии. Пользователь получает сообщение: «Привет! Сейчас тебя зарегистрируем. Введите ваше имя.»

Регистрация пользователя

Функции для обработки имени и пароля пользователя:

@bot.message_handler(func=lambda message: True)
def next_step_handler(message):
    # ...

Функция обработки имени пользователя:

def username(message):
    global name
    name = message.text.strip()
    bot.reply_to(message, "Введите пароль")
    # ...

Функция обработки пароля пользователя:

def user_pass(message):
    global password
    password = message.text.strip()

    conn = sqlite3.connect('proger.sqlite3')
    cursor = conn.cursor()

    cursor.execute("INSERT INTO users (name, pass) VALUES (?, ?)", (name, password))
    conn.commit()
    conn.close()
    # ...

В функции user_pass пользователь добавляется в базу данных. Для корректной подстановки данных используется кортеж: (name, password).

Вывод списка пользователей

Обработчик callback данных выводит список пользователей:

@bot.callback_query_handler(func=lambda call: True)
def callback(call):
    # ...

Получение и вывод списка пользователей:

conn = sqlite3.connect('proger.sqlite3')
cursor = conn.cursor()
users = cursor.execute("SELECT * FROM users").fetchall()
message = ""
for element in users:
    message += f"Имя: {element[1]}, Пароль: {element[2]}\n"
bot.send_message(call.message.chat.id, message)
conn.close()

Код выбирает все данные из таблицы users с помощью SELECT * FROM users, перебирает результаты и формирует строку для вывода имени и пароля каждого пользователя.

Урок описывает подключение к базе данных SQLite3, создание таблицы, запись и чтение данных, а также вывод данных пользователю. Аналогичный подход применим к другим базам данных.

Что будем искать? Например,программа