Этот урок описывает создание 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, создание таблицы, запись и чтение данных, а также вывод данных пользователю. Аналогичный подход применим к другим базам данных.