Предисловие
Прошу извинения за то, что в первой статье не написал про работу с базой данных, но именно эта часть направлена на работу с MySQL.
3 часть будет неким дополнением, где мы рассмотрим работу с клавиатурой для бота и на этом цикл статей завершиться.
Подготовка
После прошлой статьи на руках мы должны иметь такой код:
import vk_api from vk_api.utils import get_random_id from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType import pymysql.cursors import requests def get_connection(): connection = pymysql.connect(host='you_host', user='you_user', password='you_password', db='you_db' charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) return connection <anchor>habracut</anchor> vk_session = vk_api.VkApi(token="a6f87v8c9a9sa87a7af9a0f9f9v8a6s6c5b5m6n8bds09asc8d7b87d87bd87n") vk = vk_session.get_api() longpoll = VkBotLongPoll(vk_session, "637182735") #Проверка действий for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW: #Проверяем не пустое ли сообщение нам пришло if event.obj.text != '': #Проверяем пришло сообщение от пользователя или нет if event.from_user: #Отправляем сообщение vk.messages.send( user_id=event.obj.from_id, random_id=get_random_id(), message=event.obj.text)
Создадим бота, который будет возвращать нам результат положительный или отрицательный. Например «Life» и «Dead». Потом заносить его в базу данных и в будущем отправлять этот результат нам.
Для начала мы должны иметь свою базу данных с уже готовой таблицей.
Если кто то не умеет создавать таблицы, то вот код, который необходимо вставить будучи в mysql консоли:
CREATE DATABASE `firstbot`; CREATE TABLE `mode`(Id_User INT(11), Mode VARCHAR(6) DEFAULT("NOT"), PRIMARY KEY(Id_User));
На этом каркас нашей таблицы будет готов. Подробнее о создании и изменении таблиц можно найти на офф. сайте(ссылка будет ниже).
Создадим функцию, которая будет рандомно возвращать Dead или Live:
#Подключим новый модуль random import random def random_mode(): #Получаем рандомное число в районе от 1 до 200 return random.choice(["Live","Dead"])
Теперь мы должны сделать функцию, которая отправит в базу данных наши значения.
def add_to_database(function_mode, x): #Создаем новую сессию connection = getConnection() #Будем получать информацию от сюда cursor = connection.cursor() #Наш запрос sql = "INSERT INTO mode (Id_User, Mode) VALUES (%s, %s) ON DUPLICATE KEY UPDATE Mode = %s" #Выполняем наш запрос и вставляем свои значения cursor.execute(sql, (x, function_mode, function_mode)) #Делаем коммит connection.commit() #Закрываем подключение connection.close() #Возвращаем результат return function_mode
Мы создали функцию, которая будет добавлять человека в базу данных или заканчивать свою работу, если он уже там есть. В нашем случае все до ON DUPLICATE KEY UPDATE заносит наши результаты в базу данных. Если в базе данных есть уже колонка с id нашего юзера, то в базу данных не заносится новое значение, а обновляется за что и отвечает ON DUPLICATE KEY UPDATE.
Но помимо того, что мы заносим значения в базу данных, нам надо их получать. Для этого создадим такую функцию.
def select_from_database(x): connection = get_connection() cursor = connection.cursor() sql = "SELECT Mode FROM mode WHERE Id_User = %s" cursor.execute(sql, (x,)) #Получаем запрашиваемые данных и заносим их в переменные for i in cursor: mode_send = i['Mode'] #Проверяем точно ли есть такая запись if cursor.fetchall() == (): mode_send = 'Вы еще не пробовали' connection.close() return mode_send
cursor.fetchall() распаковывает получаемый нами запрос и отображает его. При помощи условия мы проверяем точно ли запись в базе данных есть. Если ее нет, то мы присваиваем ей желаемое значение-предупреждение
Все что нам осталось это собрать код полностью и добавить пару строк, что бы все работало так как мы хотим.
if event.obj.text == 'Попытка': if event.from_user: id_user = event.obj.from_id vk.messages.send( user_id=event.obj.from_id, random_id=get_random_id(), message="Ваш результат: " + add_to_database(random_mode(), id_user)) if event.obj.text == 'Прошлый результат': if event.from_user: idUser = event.obj.from_id vk.messages.send( user_id=event.obj.from_id, random_id=get_random_id(), message="Ваш последний: " + select_from_database(id_user)
И таким образом мы получим ответ от нашего бота

Итог
С помощью проделанной работы мы создали бота умеющего работать с MySQL. На этом его функционал не заканчивается. Он намного шире и больше, а ограничен только вашей фантазией.
Код не идеале и писал я его только, что бы показать как работает MySQL. Если вы знаете способы лучше, смело применяйте их. Так же приму любую помощь по усовершенствовани�� текущего кода.
Полезные ссылки
Официальная страница PyMySQL
Официальная страница MySQL
Документация PyMySQL на русском
Документация vk_api
Документая API Вконтакте
Код самого бота
