Предисловие
Прошу извинения за то, что в первой статье не написал про работу с базой данных, но именно эта часть направлена на работу с 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 Вконтакте
Код самого бота
