Bot para VK en Python con MySQL en una hora, parte 2

Prólogo


Pido disculpas por el hecho de que no escribí sobre trabajar con la base de datos en el primer artículo, pero esta parte está dirigida a trabajar con MySQL.

La Parte 3 será una especie de adición, donde consideraremos trabajar con el teclado para el bot y este ciclo de artículos terminará.

Preparación


Después del último artículo disponible, deberíamos tener 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) 

Creemos un bot que nos devuelva un resultado positivo o negativo. Por ejemplo, "Vida" y "Muerto". Luego ingréselo en la base de datos y en el futuro envíenos este resultado.

Primero, debemos tener nuestra propia base de datos con una tabla preparada.

Si alguien no sabe cómo crear tablas, aquí está el código que debe insertar mientras está en la consola mysql:

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

Sobre esto, el marco de nuestra mesa estará listo. Se puede encontrar más información sobre cómo crear y modificar tablas en off. sitio web (el enlace estará debajo).

Cree una función que devolverá aleatoriamente Dead or Live:

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

Ahora tenemos que hacer una función que envíe nuestros valores a la base de datos.

 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 

Creamos una función que agregará a una persona a la base de datos o finalizará su trabajo, si ya está allí. En nuestro caso, todo hasta ON DUPLICATE KEY UPDATE pone nuestros resultados en la base de datos. Si la base de datos ya tiene una columna con la identificación de nuestro usuario, el nuevo valor no se ingresa en la base de datos, sino que se actualiza, de lo cual es responsable la ACTUALIZACIÓN DE LA LLAVE EN DUPLICACIÓN.

Pero además del hecho de que ingresamos valores en la base de datos, necesitamos obtenerlos. Para hacer esto, cree tal función.

 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 () desempaqueta la solicitud que recibimos y la muestra. Usando la condición, verificamos si el registro en la base de datos es exacto. Si no es así, le asignamos el valor de advertencia deseado.
Todo lo que nos queda es recopilar el código por completo y agregar un par de líneas para que todo 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) 

Y entonces recibimos una respuesta de nuestro bot



Resumen


Con la ayuda del trabajo realizado, creamos un bot que sabe cómo trabajar con MySQL. Esto no termina su funcionalidad. Es mucho más amplio y más grande, y está limitado solo por tu imaginación.
El código no es ideal y solo lo escribí para mostrar cómo funciona MySQL. Si conoce mejor los métodos, no dude en usarlos. También aceptaré cualquier ayuda para mejorar el código actual.

Enlaces utiles


Página oficial de PyMySQL
Página oficial de MySQL
Documentación de PyMySQL en ruso
Documentación de vk_api
Vkontakte API Document
El código del bot mismo

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


All Articles