March 19

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