بوت ل VK على بيثون مع الخلية في ساعة ، الجزء 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 KE UP UPATE يضع نتائجنا في قاعدة البيانات. إذا كانت قاعدة البيانات تحتوي بالفعل على عمود بهوية مستخدمنا ، فلن يتم إدخال القيمة الجديدة في قاعدة البيانات ، ولكن يتم تحديثها والتي يكون 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 الرسمية
الخلية الرسمية الصفحة
وثائق PyMySQL باللغة الروسية
وثائق Vk_api
وثيقة API فكونتاكتي
رمز البوت نفسه

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


All Articles