Почему отсутствует вывод данных?

Здравствуйте! У меня есть код на Python, использующий Flask и MySQL, а также HTML-шаблон. Можете объяснить, как работает данный код и какие изменения можно внести для его улучшения? 

Вот код: 
<br/> <b>app.py</b> <br/> <pre><code class="python">from flask import Flask, request, render_template
import mysql.connector
from config import *

app = Flask(__name__)

def get_db_connection():
    conn = mysql.connector.connect(
        host=host,
        user=user,
        password=password,
        database=db_name
    )
    return conn

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/search_results', methods=['GET'])
def search_results():
    query = request.args.get('query', '')
    conn = get_db_connection()
    cursor = conn.cursor(dictionary=True)

    cursor.execute("USE all_info")

    cursor.execute("SHOW COLUMNS FROM events")
    columns = [row['Field'] for row in cursor.fetchall()]

    search_query = "SELECT * FROM events WHERE " + " OR ".join([f"{col} LIKE %s" for col in columns])

    cursor.execute(search_query, [f'%{query}%'] * len(columns))
    results = cursor.fetchall()

    conn.close()

    return render_template('search_results.html', results=results)

if __name__ == '__main__':
    app.run(debug=True)</code></pre> 
<br/> <br/> Вот также HTML-шаблон: 
<br/> <br/> <b>index.html</b> <br/> <pre><code class="html">&lt;!DOCTYPE html&gt;
&lt;html lang="ru"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;Axtarışın nəticəsi&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: Arial, sans-serif;
            margin: 50px;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-bottom: 20px;
        }
        table, th, td {
            border
  • 21 сентября 2024 г. 20:13
Ответы на вопрос 2
В вашем коде Flask реализация поиска по базе данных выглядит довольно неплохо, но нужно проверить несколько аспектов, чтобы понять, почему отсутствует вывод данных. Давайте разберем основные части кода и HTML-шаблона, а также предложим некоторые улучшения.

### Как работает ваш код:

1. **Получение соединения с БД**: Функция `get_db_connection()` устанавливает соединение с базой данных MySQL, используя параметры из файла `config.py`.

2. **Главная страница**: 
   - У вас есть маршрут `index`, который просто рендерит `index.html`.

3. **Поиск данных**:
   - В маршруте `search_results` вы получаете параметр `query` из URL (`request.args.get('query', '')`), что означает, что для выполнения поиска будет нужно передать этот параметр в URL.
   - Устанавливается соединение с базой данных, выполняются запросы, которые извлекают названия столбцов из таблицы `events`.
   - Затем сформированный запрос SQL выполняется с использованием LIKE для поиска по всем столбцам, возвращая соответствующие записи.

4. **Обработка результатов**:
   - После выполнения запроса, результаты передаются на шаблон `search_results.html`.

### Возможные причины отсутствия вывода данных:

1. **Проблема с запросом**: Убедитесь, что в таблице `events` есть столбцы, содержащие запрашиваемые значения, и они корректно сопоставляются с `query`.

2. **Отсутствие данных в результате запроса**: Если таблица пустая или ни одна запись не соответствует запросу, результат будет пустым.

3. **Проблема в HTML-шаблоне**: Нужно проверить, правильно ли отображается `search_results.html` и есть ли код для вывода результатов.

### Рекомендации по улучшению:

1. **Обработка данных в шаблоне**: Если вы не показываете данные в `search_results.html`, вам нужно добавить код для отображения полученных результатов. Например:
   ```html
   <!DOCTYPE html>
   <html lang="ru">
   <head>
       <meta charset="UTF-8">
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
       <title>Результаты поиска</title>
   </head>
   <body>
       <h1>Результаты поиска</h1>
       {% if results %}
           <table>
               <thead>
                   <tr>
                       <!-- Заголовки столбцов -->
                       {% for col in results[0].keys() %}
                           <th>{{ col }}</th>
                       {% endfor %}
                   </tr>
               </thead>
               <tbody>
                   {% for result in results %}
                       <tr>
                           {% for value in result.values() %}
                               <td>{{ value }}</td>
                           {% endfor %}
                       </tr>
                   {% endfor %}
               </tbody>
           </table>
       {% else %}
           <p>Нет результатов для вашего запроса.</p>
       {% endif %}
   </body>
   </html>
   ```

2. **Улучшение безопасности**: Использовать параметризованные запросы правильно, как у вас уже и сделано с использованием `%s`. Однако стоит также добавить обработку исключений для обработки неправильных запросов.

3. **Проверка необходимых импортов и конфигураций**: Убедитесь, что ваш `config.py` содержит правильные данные для подключения к БД.

### Проверка настройки приложения

- Запустите Flask-приложение и перейдите к корневому маршруту `/`. 
- Убедитесь, что вы вводите что-то в поле поиска на странице с `index.html` (который вы не привели), чтобы отправить запрос на `/search_results`.

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