Bot für VK auf Python mit MySQL in einer Stunde, Teil 2

Vorwort


Ich entschuldige mich für die Tatsache, dass ich im ersten Artikel nicht über die Arbeit mit der Datenbank geschrieben habe, aber dieser Teil zielt auf die Arbeit mit MySQL ab.

Teil 3 wird eine Art Ergänzung sein, in der wir überlegen werden, mit der Tastatur für den Bot zu arbeiten, und dieser Artikelzyklus endet.

Vorbereitung


Nach dem letzten Artikel sollten wir diesen Code haben:

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) 

Erstellen wir einen Bot, der ein positives oder negatives Ergebnis liefert. Zum Beispiel "Leben" und "Tot". Geben Sie es dann in die Datenbank ein und senden Sie uns dieses Ergebnis in Zukunft.

Zunächst müssen wir eine eigene Datenbank mit einer vorgefertigten Tabelle haben.

Wenn jemand nicht weiß, wie man Tabellen erstellt, ist hier der Code, den Sie in die MySQL-Konsole einfügen müssen:

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

Darauf wird der Rahmen unserer Tabelle fertig sein. Weitere Informationen zum Erstellen und Ändern von Tabellen finden Sie unter Ein. Website (Link wird unten sein).

Erstellen Sie eine Funktion, die zufällig Dead oder Live zurückgibt:

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

Jetzt müssen wir eine Funktion erstellen, die unsere Werte an die Datenbank sendet.

 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 

Wir haben eine Funktion erstellt, mit der eine Person zur Datenbank hinzugefügt oder ihre Arbeit beendet wird, wenn sie bereits vorhanden ist. In unserem Fall werden unsere Ergebnisse bis zu ON DUPLICATE KEY UPDATE in die Datenbank aufgenommen. Wenn die Datenbank bereits eine Spalte mit der ID unseres Benutzers enthält, wird der neue Wert nicht in die Datenbank eingegeben, sondern aktualisiert, für die ON DUPLICATE KEY UPDATE verantwortlich ist.

Aber abgesehen von der Tatsache, dass wir Werte in die Datenbank eingeben, müssen wir sie erhalten. Erstellen Sie dazu eine solche Funktion.

 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 () entpackt die empfangene Anfrage und zeigt sie an. Anhand der Bedingung prüfen wir, ob der Datensatz in der Datenbank korrekt ist. Ist dies nicht der Fall, weisen wir ihm den gewünschten Warnwert zu.
Wir müssen nur noch den Code vollständig sammeln und ein paar Zeilen hinzufügen, damit alles so funktioniert, wie wir es wollen.

 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) 

Und so bekommen wir eine Antwort von unserem Bot



Zusammenfassung


Mit Hilfe der geleisteten Arbeit haben wir einen Bot erstellt, der weiß, wie man mit MySQL arbeitet. Dies beendet nicht seine Funktionalität. Es ist viel breiter und größer und nur durch Ihre Vorstellungskraft begrenzt.
Der Code ist nicht ideal und ich habe ihn nur geschrieben, um zu zeigen, wie MySQL funktioniert. Wenn Sie die Methoden besser kennen, können Sie sie gerne anwenden. Ich werde auch jede Hilfe zur Verbesserung des aktuellen Codes annehmen.

Nützliche Links


PyMySQL offizielle Seite
Offizielle MySQL-Seite
PyMySQL-Dokumentation in russischer Sprache
Vk_api Dokumentation
Vkontakte API-Dokument
Der Code des Bots selbst

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


All Articles