一个小时内用MySQL在Python上使用VK进行Bot训练,第2部分

前言


对于第一篇文章中我没有写关于使用数据库的事实,我深表歉意,但是本部分旨在使用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) 

让我们创建一个机器人,该机器人将为我们带来积极或消极的结果。 例如,“生命”和“死亡”。 然后将其输入数据库,以后再将此结果发送给我们。

首先,我们必须拥有自己的带有现成表的数据库。

如果有人不知道如何创建表,那么以下是您需要在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文档
Vkontakte API文档
机器人本身的代码

Source: https://habr.com/ru/post/zh-CN452210/


All Articles