Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 19, 2017 15:26:02

Ethex
Зарегистрирован: 2017-10-19
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

MySQL Имитация ошибки

Доброго времени суток
С недавнего времени я, лелея надежду однажды в будущем стать настоящим питоньеро, изучаю Python по книге. В данный момент я на этапе главы об обработчиках ошибок. Есть код веб-приложения

 from flask import Flask, render_template, request, escape 
from mod import sl
from DBcm import UseDatabase
from checker import cl_in
app = Flask(__name__)
app.config['dbconfig'] = {'host': '192.168.100.141',
                          'user': 'vsu',
                          'password': 'vsp',
                          'database': 'vsdb',}
def log_request(req: 'flask_request', res: str) -> None:
       with UseDatabase(app.config['dbconfig']) as cursor:
              SQL = """insert into log
                       (phrase, letters, ip, browser_string, results)
                       values
                       (%s, %s, %s, %s, %s)"""
              cursor.execute(SQL, (req.form['phrase'],
                                   req.form['letters'],
                                   req.remote_addr,
                                   req.user_agent.browser,
                                   res, ))
                       
@app.route('/search4', methods=['POST'])
def do_search() -> str:
       phrase = request.form['phrase']
       letters = request.form['letters']
       title = 'Here are your results'
       results = str(sl(phrase, letters))
       try:
                    log_request(request, results)
       except Exception as err:
            print('Error : ', str(err))
       return render_template('results.html',
                              the_phrase = phrase,
                              the_letters = letters,
                              the_title = title,
                              the_results = results,)
@app.route('/')
@app.route('/entry')
def entry_page() -> 'html':
      return render_template('entry.html',
                             the_title='Welcome to SL on the web')
@app.route('/viewlog')
@cl_in
def view_log() -> 'html':
      
       with UseDatabase(app.config['dbconfig']) as cursor:
           SQL = """select phrase, letters, ip, browser_string, results
                    from log""" 
           cursor.execute(SQL)
           contents = cursor.fetchall()
           titles = ('Phrse', 'Letters', 'Remote_addr', 'User_agent', 'Results')
           return render_template('viewlog.html',
                                   the_title = 'View Log',
                                   the_row_titles = titles,
                                   the_data = contents, )                                 
                                                          
@app.route('/login')
def do_login() -> str:
      session['logged_in'] = True
      return 'You are now logged in'
@app.route('/logout')
def do_logout() -> str:
      session.pop('logged_in')
      return 'You are now logged_out'
app.run(debug=True)
В функции do_search имеется обработчик исключений. Я должен его проверить. Чтобы сымитировать ошибку мне нужно “выключить базу данных” (не приостанавливая работу веб-приложения), но не сказано как
Хотелось бы узнать. Заранее спасибо

Я же не ошибся разделом?

update: Кажется, ошибся. Перенесите тему в центр помощи

Отредактировано Ethex (Окт. 19, 2017 15:29:20)

Офлайн

#2 Окт. 19, 2017 16:03:24

Ethex
Зарегистрирован: 2017-10-19
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

MySQL Имитация ошибки

Вот код диспетчера контекстов UseDatabase, который используется в функции, вызываемой внутри блока обработчика:

 import mysql.connector
class UseDatabase:
      def __init__(self, config: dict) -> None:
            self.configuration = config
            
      def __enter__(self) -> 'cursor':
            self.conn = mysql.connector.connect(**self.configuration)
            self.cursor = self.conn.cursor()
            return self.cursor
      def __exit__(self, exc_type, exc_value, exc_trace) -> None:
            self.conn.commit()
            self.cursor.close()
            self.conn.close()
Я попробовал закоментить строку, в которой идёт подключение к серверу MySQL, но ошибки, которая мне нужна не произошло…

Офлайн

#3 Окт. 19, 2017 16:52:01

Ethex
Зарегистрирован: 2017-10-19
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

MySQL Имитация ошибки

Да, я, не подумав, влепил сюда длинный код, не пояснив какой функционал он выполняет и даже не привёл кода всех задействованных модулей… каюсь
Не знаю как вызвать ошибку соединения с БД. Но, судя по тому что автор книги не дал указаний, действие должно быть простое, не требуещего изучения кода

Офлайн

#4 Окт. 19, 2017 17:40:38

Slow
Зарегистрирован: 2017-07-26
Сообщения: 88
Репутация: +  4  -
Профиль   Отправить e-mail  

MySQL Имитация ошибки

Думаю, подразумевалось, что нужно прибить сервис СУБД

Офлайн

#5 Окт. 19, 2017 18:26:56

Ethex
Зарегистрирован: 2017-10-19
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

MySQL Имитация ошибки

Slow, подразумевается остановка сервера мускуля?

mysqladmin -u user -p shutdown ?

Офлайн

#6 Окт. 19, 2017 18:54:47

Slow
Зарегистрирован: 2017-07-26
Сообщения: 88
Репутация: +  4  -
Профиль   Отправить e-mail  

MySQL Имитация ошибки

скорее,

service mysqld stop

Офлайн

#7 Окт. 20, 2017 18:16:11

Ethex
Зарегистрирован: 2017-10-19
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

MySQL Имитация ошибки

Решил проблему отключением службы мускуля через панель управления
Приношу извинения за некоректную формулировку вопроса

Отредактировано Ethex (Окт. 20, 2017 18:16:37)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version