Как можно с помощью Python создать выпадающий список, заполнив его данными из базы данных PostgreSQL?

Как можно настроить класс data (), чтобы при выборе определенного значения в одном выпадающем списке, данные в другом выпадающем списке загружались из разных таблиц PostgreSQL?
  • 2 февраля 2024 г. 17:59
Ответы на вопрос 2
Чтобы создать выпадающий список в Python и заполнить его данными из PostgreSQL, можно использовать разные технологии в зависимости от того, для какого типа приложения вы его создаете. Например, если вы создаете веб-приложение, то можно использовать Flask или Django в комбинации с HTML и JavaScript.

Допустим, у нас есть веб-приложение на Flask, и мы хотим создать выпадающий список с данными из PostgreSQL. Ниже пример кода, иллюстрирующий как это можно сделать:

```python
from flask import Flask, render_template
import psycopg2

app = Flask(__name__)

def get_data():
    conn = psycopg2.connect(database="your_database", user="your_username", password="your_password", host="localhost", port="5432")
    cur = conn.cursor()
    cur.execute("SELECT column_name FROM your_table;")
    data = cur.fetchall()
    cur.close()
    conn.close()
    return data

@app.route('/')
def index():
    data = get_data()
    return render_template('index.html', data=data)

if __name__ == '__main__':
    app.run(debug=True)
```

Соответственно в вашем файле `index.html` должен быть HTML код с выпадающим списком (следовательно в форме `select`), который выглядит примерно так:

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/some_endpoint" method="post">
    <label for="dropdown">Choose an option:</label>
    <select id="dropdown" name="dropdown">
        {% for item in data %}
        <option value="{{ item[0] }}">{{ item[0] }}</option>
        {% endfor %}
    </select>
    <input type="submit" value="Submit">
</form>

</body>
</html>
```

Теперь рассмотрим, как настроить связанные выпадающие списки. Для этого нам понадобится JavaScript, чтобы обновлять второй выпадающий список на основе выбранного значения в первом. В Flask приложении это можно сделать с помощью AJAX запроса, который будет отправлен на сервер для получения данных для второго списка из другой таблицы в зависимости от выбора.

Вот пример JavaScript кода, который можно добавить в ваш `index.html`:

```html
<script>
document.getElementById('first_dropdown').addEventListener('change', function() {
    var value = this.value;
    fetch('/update-dropdown?choice=' + value)
        .then(function(response) {
            return response.json();
        })
        .then(function(data) {
            var secondDropdown = document.getElementById('second_dropdown');
            secondDropdown.innerHTML = '';
            data.forEach(function(item) {
                var option = document.createElement('option');
                option.value = item;
                option.textContent = item;
                secondDropdown.appendChild(option);
            });
        });
});
</script>
```

И соответствующий маршрут в вашем Flask приложении:

```python
@app.route('/update-dropdown')
def update_dropdown():
    choice = request.args.get('choice', type=str)
    
    # Здесь логика получения данных из второй таблицы на основе выбранного значения в первом списке
    data = get_data_for_second_dropdown(choice)
    
    return jsonify(data)
```

Функцию `get_data_for_second_dropdown` вам нужно будет реализовать самостоятельно, она должна соединяться с базой данных, запрашивать данные и возвращать их в формате, который можно будет легко использовать в JavaScript (обычно это JSON).

Не забудьте импортировать `jsonify` и `request` модули из `flask` для работы с JSON и запросами соответственно.
select "Route_num" from "Route TB" 
Во-первых, ты кавычки не перепутал? В SQL вроде имена столбцов и таблиц экранируются `бэктиками`, а не "кавычками".
Во-вторых, ты просишь выбрать одно значение на каждой строке. Но в то же время обращаешься к item[1], т.е. ко второму элементу строки. Которого быть не может, так как ты выбираешь только один.
Похожие вопросы