Использование класса python для доступа к MySQL, но внутренняя ошибка сервера - PullRequest
0 голосов
/ 03 мая 2020

Вот класс, который я использовал для подключения и запроса данных, которые я хотел.

class DatabaseOperations():
# Fill in the information of your database server.
__db_url = 'localhost'
__db_username = 'root'
__db_password = ''
__db_name = 'dates'
__db = ''
def __init__(self):
    self.__db = self.db_connect()

def __del__(self):
    """Disconnect from database when the object is destroyed."""
    self.__db.close()
def db_connect(self):
    self.__db = pymysql.connect(self.__db_url, self.__db_username,
    self.__db_password, self.__db_name)
    return self.__db
def query_events_by_date(self, date):
    cursor = self.__db.cursor()
    # Prepare SQL query to INSERT a record into the database.
    sql = "select event_name from events,dates,dates_events where events.event_id = dates_events.event_id AND dates.data_id = dates_events.data_id AND dates.data = '%s'"%(data)
    try:
        cursor.execute(sql)
        results = cursor.fetchall()
    except:
        print("Error: unable to fetch data")
    return results

и приведенный выше код позволяет пользователю вводить дату и запрашивать события данной даты из базы данных.

@app.route('/query', methods=['GET', 'POST'])
def query():
   #events=["inoput in right"]
    if request.method == 'POST':
        data = request.form.to_dict()
        events = data
        do = DatabaseOperations()
        result = do.query_events_by_date(data)
        events = []
        for i in result:
            events.append(i[1])
        del db # close the database
    dt = datetime.datetime.now()
    # Assign the variables, convert to string.3
    time = dt.strftime("%Y-%m-%d")
    return render_template('query.html', events=events, date = time)

, но всегда отображается «Внутренняя ошибка сервера. Сервер обнаружил внутреннюю ошибку» и не смог выполнить ваш запрос. Либо сервер перегружен, либо в приложении произошла ошибка. Если я удалю «result = do.query_events_by_date (data)», ошибка исчезнет. Я хочу знать причину и как это исправить.

терминал

PS C:\Users\Dongsheng\Desktop\code> $env:FLASK_APP = "application.py"
PS C:\Users\Dongsheng\Desktop\code> flask run
 * Serving Flask app "application.py"

* Среда: производство ПРЕДУПРЕЖДЕНИЕ: Это сервер разработки. Не используйте его в производственном развертывании. Вместо этого используйте рабочий сервер WSGI. * Режим отладки: выключен * Работает на http://127.0.0.1: 5000 / (нажмите CTRL + C, чтобы выйти)

127.0.0.1 - - [03/May/2020 23:01:35] "[37mGET / HTTP/1.1[0m" 200 -
[2020-05-03 23:01:38,360] ERROR in app: Exception on /query [GET]
Traceback (most recent call last):
  File "c:\users\dongsheng\appdata\local\programs\python\python38-32\lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "c:\users\dongsheng\appdata\local\programs\python\python38-32\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "c:\users\dongsheng\appdata\local\programs\python\python38-32\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "c:\users\dongsheng\appdata\local\programs\python\python38-32\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "c:\users\dongsheng\appdata\local\programs\python\python38-32\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "c:\users\dongsheng\appdata\local\programs\python\python38-32\lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\Dongsheng\Desktop\code\application.py", line 98, in query
    return render_template('query.html', events=events, date = time)
UnboundLocalError: local variable 'events' referenced before assignment

1 Ответ

0 голосов
/ 03 мая 2020

Простое исправление - это Поместите events поверх условного, таким образом, списка событий, который создается и заполняется в условии POST

Также ваш метод не имеет отступа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...