Найти - Пользователи
Полная версия: MySQL Имитация ошибки
Начало » Python для новичков » MySQL Имитация ошибки
1
Ethex
Доброго времени суток
С недавнего времени я, лелея надежду однажды в будущем стать настоящим питоньеро, изучаю 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
Вот код диспетчера контекстов 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, но ошибки, которая мне нужна не произошло…
Ethex
Да, я, не подумав, влепил сюда длинный код, не пояснив какой функционал он выполняет и даже не привёл кода всех задействованных модулей… каюсь
Не знаю как вызвать ошибку соединения с БД. Но, судя по тому что автор книги не дал указаний, действие должно быть простое, не требуещего изучения кода
Slow
Думаю, подразумевалось, что нужно прибить сервис СУБД
Ethex
Slow, подразумевается остановка сервера мускуля?

mysqladmin -u user -p shutdown ?
Slow
скорее,
service mysqld stop
Ethex
Решил проблему отключением службы мускуля через панель управления
Приношу извинения за некоректную формулировку вопроса
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB