Ошибка атрибута __enter__, когда MySQL использует данные из соединения RabbitMQ и пытается проанализировать данные для страницы входа - PullRequest
0 голосов
/ 04 марта 2020

Итак, я работаю над проектом, в котором участвуют три виртуальные машины, на которых работает Ubuntu 18. Одна виртуальная машина - это внешний интерфейс, имеющий страницу входа и регистрации. Тогда у нас есть DMZ, которая является RabbitMQ. Я бэк-энд работает MySQL. Внешний интерфейс должен войти в систему с именем пользователя и паролем или либо зарегистрировать имя пользователя и пароль, и мой код должен иметь возможность аутентифицировать пользователя или зарегистрировать нового пользователя.

Со своей стороны, я использую Python MySQL разъем. Когда я запустил код до того, как интерфейс сделал что-нибудь, документ показал, что он слушает rabbitmq, готовый к использованию. Когда я запускал его, пользователь внешнего интерфейса попытался зарегистрировать нового пользователя, чтобы получить данные в RabbitMQ, и я смог использовать эти данные из RabbitMQ, однако я не смог прочитать какие-либо данные, потому что терминал продолжал давать мне ошибка при запуске моего Python3 кода ниже. Ошибка была AttributeError: __enter__. Я что-то получаю, но не могу прочитать из-за этой ошибки. Я попробовал поискать в Google проблему, и я не мог понять, почему.

Кстати, если вы видите письмо b, написанное перед некоторыми из одинарных кавычек, я был вынужден вставить это туда, так как я получил ошибки о необходимости строки байтов, тогда я наконец получил ошибку атрибута после исправления тех.

import pika
import time
import mysql.connector

credentials=pika.PlainCredentials('rabbitmq-test', 'test')
parameters=pika.ConnectionParameters('192.168.1.48', 
                5672,   
                '/',
                               credentials)

connection = pika.BlockingConnection(parameters)
channel = connection.channel()
channel.queue_declare(queue='user-test')

cnx = mysql.connector.connect(user='backendtest', password='NOTweak$_@123!', host='192.168.1.45', port='3306', database='back_end_database')
cursor = cnx.cursor()

def __enter__(self):
        return self



def login(emailaddress, password):
    authquery=b"SELECT password FROM DB_auth WHERE email='" + emailaddress + b"';"
    with cursor.execute(authquery):
        row=cursor.fetchone()
    try: 
        passwd=row[0]
        if password==passwd:                
            return "true"
        else:                   
            return "false"

    except TypeError:       
        return "false"


def registeruser(emailaddress, password, firstname, lastname):

    addcredentialsquery="SELECT COUNT(*) FROM DB_add;"
    with cursor.execute(addcredentialsquery):
        row=cursor.fetchone()
    count=row[0]+1


    registerquery="INSERT INTO DB_add VALUES (" + str(count) + ",'" + emailaddress + "','"  + password + "','" + firstname + "','" + lastname + "';"
    try:
        cursor.execute(registerquery)
        connection.commit()
        return "true"
    except pyodbc.IntegrityError:                   
        return "false"

def loginrequest(ch, method, props, body):          
    emailaddress = body.split(b',')[0]
    password = body.split(b',')[0]
    response = login(emailaddress, password)

    if response=='true':
        global email
        email=emailaddress
    ch.basic_publish(exchange='', routing_key=props.reply_to, properties=pika.BasicProperties(correlation_id = props.correlation_id), body=str(response))
    ch.basic_ack(delivery_tag=method.delivery_tag)

def registerrequest(ch, method, props, body):
    emailaddress = body.split(',')[0]
    password = body.split(',')[1]
    firstname = body.split(',')[2]
    lastname = body.split(',')[3]
    response = registeruser(emailaddress, password, firstname, lastname)
    ch.basic_publish(exchange='', routing_key=props.reply_to, properties=pika.BasicProperties(correlation_id = props.correlation_id), body=str(response))
    ch.basic_ack(delivery_tag=method.delivery_tag)

channel.basic_qos(prefetch_count=1)
channel.basic_consume(queue='user-test', on_message_callback=loginrequest)
print(" [x] Awaiting login requests")
channel.basic_consume(queue='user-test', on_message_callback=registerrequest)
print(" [x] Awaiting registration requests")    
channel.start_consuming() ```


...