1. телеграм бот внесение в базу даних єто простое (хуйня)внесение -- без сохран сообщений
Введение
Начинающие разработчики на Python часто сталкиваются с задачей подключения базы данных. Из личного опыта, этот вопрос может показаться сложным из-за обилия разнообразных инструкций в интернете. В этом руководстве я поделюсь простым способом интеграции базы данных Sqlite3, демонстрируя на примере создания Telegram-бота.
Первые шаги
Для начала вам потребуются базовые знания Python для написания элементарного бота. Этот гид подойдет не только для создания ботов, но и для других проектов. В случае отсутствия в вашем арсенале PyCharm или других инструментов работы с базами данных, рекомендуется загрузить SQLiteStudio с официального сайта.
Перейдем к написанию кода. В терминале установите pyTelegramBotAPI командой:
pip install pyTelegramBotAPI
Создайте новый Python файл и впишите следующее:
import sqlite3 import telebot bot = telebot.TeleBot("token")
Модуль sqlite3
уже включен в стандартную библиотеку Python, поэтому дополнительная установка не требуется. Замените "your_token_here"
на токен, полученный от BotFather. Для проверки работоспособности бота добавьте:
@bot.message_handler(commands=['start']) def start_message(message): bot.send_message(message.chat.id, 'Добро пожаловать')
Запустим код. Если при запуске бота он пишет нам "Добро пожаловать", то все работает отлично.
Настройка базы данных
Открываем SQLiteStudio. Во вкладке Database выбираем пункт Add a database. Для удобства можно использовать сочетание Ctrl+O.
Далее нажимаем на зеленую кнопку Создать новый фал базы данных. Выбираем директорию вашего проекта. В ней можете создать отдельную папку db, где будет хранится файл с базой. Вводим название, например database. Расширение будет присвоено автоматически. Нажимаем Сохранить. Теперь слева в списке у нас появился наш файл. Кликаем по нему ПКМ и выбираем пункт Connect to the database. Соединение с базой установлено. Появилось два подпункта: Таблицы и Представления. В этом уроке мы будем затрагивать только пункт Таблицы. Нажимаем по нему ПКМ и выбираем Add a table.
Затем переходим к созданию нового файла базы данных, нажимая на зеленую кнопку с соответствующим названием. Укажите местоположение файла в пределах директории вашего проекта, возможно, создав отдельную папку под названием db для хранения базы данных. Введите название файла, например, "database", и система автоматически добавит нужное расширение. После сохранения файла он появится в списке слева. Произведите правый клик мышью по файлу и выберите опцию для подключения к базе данных. После успешного подключения перед вами откроются две категории: "Таблицы" и "Представления". В рамках данного урока нас будет интересовать раздел "Таблицы", где вы сможете добавить новую таблицу, используя соответствующую опцию в контекстном меню.
В поле для ввода указываем имя для таблицы. Я назову ее test. Чуть выше есть активная кнопка Добавить столбец (Ins). В появившемся окне указываем название столбца и тип данных. Для начала вам могут понадобится такие условия, как Первичный ключ, Не NULLи Уникальность. Первый столбец я назову id, выберу тип данных INTEGER и установлю все три условия. У Первичный ключ выберу настройку Автоинкремент. Этот столбец будет автоматически создавать ID записи в таблице. Работать с ним в коде мы не будем.
В поле ввода задайте название для вашей таблицы, например, "test". Выше этого поля расположена кнопка "Добавить столбец" (Ins), которую нужно активировать. В открывшемся окне укажите название столбца и выберите его тип данных. В начале работы важно определить такие параметры, как "Первичный ключ", "Не NULL" и "Уникальность" для столбцов. Для первого столбца, который я предложу назвать "id", тип данных будет INTEGER, и я рекомендую установить все три вышеуказанных условия, включая опцию "Автоинкремент" для "Первичного ключа". Этот столбец будет автоматически назначать уникальный ID каждой записи в таблице, но мы не будем использовать его непосредственно в коде.
Второй столбец будет хранить user_id. Он будет иметь тип данных INT, уникален и не равен нулю. Третий столбец я назову user_name, присвою тип данных STRING и выберу пункт Не NULL. Еще 2 столбца будут называться user_surname и username. После того, как вы создали столбцы, нажимаем зеленую кнопку с галочкой.
В общем все будет выглядеть вот так.
Работа с базой данных в коде
Теперь давайте вновь перейдем к коду. Создадим 2 переменные.
conn = sqlite3.connect('db/database.db', check_same_thread=False) cursor = conn.cursor()
В первой мы подключаем нашу базу данных, а во второй создаем курсор для работы с таблицами. Обратите внимание на то, что у меня в директории проекта создана папка db, а уже в ней находится файл БД. Если у вас по другому, укажите расположение в первой переменной.
Теперь создадим функцию, которая будет нужна непосредственно для работы с таблицей.
def db_table_val(user_id: int, user_name: str, user_surname: str, username: str): cursor.execute('INSERT INTO test (user_id, user_name, user_surname, username) VALUES (?, ?, ?, ?)', (user_id, user_name, user_surname, username)) conn.commit()
Итак, сейчас объясню, что тут происходит. В аргументах функции мы указываем переменную user_id с типом данных inst. Далее добавляем запись в таблицу test в столбец user_id. С остальными значениями точно так же. В конце мы просто применяем изменения. Эта функция не будет выполнятся, пока мы ее не вызовем. Давайте исправим это. Создадим обработчик сообщений от пользователя и будем вносить в базу его данные.
@bot.message_handler(content_types=['text']) def get_text_messages(message): if message.text.lower() == 'привет': bot.send_message(message.from_user.id, 'Привет! Ваше имя добавленно в базу данных!') us_id = message.from_user.id us_name = message.from_user.first_name us_sname = message.from_user.last_name username = message.from_user.username db_table_val(user_id=us_id, user_name=us_name, user_surname=us_sname, username=username)
В переменные мы вносим имя пользователя, id, имя и фамилию в Telegram, а потом сохраняем в БД. В конце кода можем сделать так, чтобы бот работал постоянно.
bot.polling(none_stop=True)
Пришло время проверить, как работает код. Запускаем бота и пишем ему "Привет".
Теперь можем зайти в SQLiteStudio, и выбрав вкладку Данные посмотреть что получилось:
Как мы видим, данные уже в базе. Если их по какой-то причине нет, то обновите базу, нажав на синюю кнопку Обновить
import sqlite3 import telebot bot = telebot.TeleBot("token") conn = sqlite3.connect('db/database.db', check_same_thread=False) cursor = conn.cursor() def db_table_val(user_id: int, user_name: str, user_surname: str, username: str): cursor.execute('INSERT INTO test (user_id, user_name, user_surname, username) VALUES (?, ?, ?, ?)', (user_id, user_name, user_surname, username)) conn.commit() @bot.message_handler(commands=['start']) def start_message(message): bot.send_message(message.chat.id, 'Добро пожаловать') @bot.message_handler(content_types=['text']) def get_text_messages(message): if message.text.lower() == 'привет': bot.send_message(message.chat.id, 'Привет! Ваше имя добавлено в базу данных!') us_id = message.from_user.id us_name = message.from_user.first_name us_sname = message.from_user.last_name username = message.from_user.username db_table_val(user_id=us_id, user_name=us_name, user_surname=us_sname, username=username) bot.polling(none_stop=True)
Заключение
Мы рассмотрели основы работы с sqlite3 и создали базовый скрипт для сохранения данных пользователя. Это только начало, в следующих материалах планируется обсудить удаление пользователей и редактирование данных.