Bot para VK em Python com MySQL em uma hora, parte 2

Prefácio


Peço desculpas pelo fato de não ter escrito sobre como trabalhar com o banco de dados no primeiro artigo, mas esta parte tem como objetivo trabalhar com o MySQL.

A Parte 3 será uma espécie de adição, onde consideraremos trabalhar com o teclado para o bot e esse ciclo de artigos terminará.

Preparação


Após o último artigo em mãos, devemos ter este código:

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) 

Vamos criar um bot que nos retornará um resultado positivo ou negativo. Por exemplo, "Vida" e "Morto". Em seguida, insira-o no banco de dados e, no futuro, envie esse resultado para nós.

Primeiro, precisamos ter nosso próprio banco de dados com uma tabela pronta.

Se alguém não souber criar tabelas, eis o código que você precisa inserir enquanto estiver no console do mysql:

 CREATE DATABASE `firstbot`; CREATE TABLE `mode`(Id_User INT(11), Mode VARCHAR(6) DEFAULT("NOT"), PRIMARY KEY(Id_User)); 

Sobre isso, a estrutura da nossa tabela estará pronta. Mais informações sobre como criar e modificar tabelas podem ser encontradas desativadas. site (o link estará abaixo).

Crie uma função que retornará aleatoriamente Dead or Live:

 #   random import random def random_mode(): #      1  200 return random.choice(["Live","Dead"]) 

Agora temos que criar uma função que envie nossos valores para o banco de dados.

 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 

Criamos uma função que adiciona uma pessoa ao banco de dados ou termina seu trabalho, se ele já estiver lá. No nosso caso, tudo até ON DUPLICATE KEY UPDATE coloca nossos resultados no banco de dados. Se o banco de dados já tiver uma coluna com o ID do nosso usuário, o novo valor não será inserido no banco de dados, mas será atualizado pelo qual ON DUPLICATE KEY UPDATE é responsável.

Mas, além do fato de inserirmos valores no banco de dados, precisamos obtê-los. Para fazer isso, crie essa função.

 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 () descompacta a solicitação que recebemos e a exibe. Usando a condição, verificamos se o registro no banco de dados está correto. Caso contrário, atribuímos o valor de aviso desejado.
Tudo o que resta para nós é coletar o código completamente e adicionar algumas linhas para que tudo funcione como queremos.

 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) 

E assim obtemos uma resposta do nosso bot



Sumário


Com a ajuda do trabalho realizado, criamos um bot que sabe trabalhar com o MySQL. Isso não termina sua funcionalidade. É muito mais amplo e maior, e limitado apenas pela sua imaginação.
O código não é ideal e eu apenas o escrevi para mostrar como o MySQL funciona. Se você conhece melhor os métodos, fique à vontade para usá-los. Também aceitarei qualquer ajuda para melhorar o código atual.

Links úteis


Página oficial do PyMySQL
Página oficial do MySQL
Documentação do PyMySQL em russo
Documentação Vk_api
Documento da API do Vkontakte
O código do bot em si

Source: https://habr.com/ru/post/pt452210/


All Articles