def index():
# соединение с БД
with psycopg2.connect(**params) as conn:
# создание объекта курсора для запуска команд PostgreSQL в базе данных
cur = conn.cursor()
cur.execute("SELECT * FROM fact_table;")
rows = cur.fetchall()
cur.close()
if request.method == "POST":
with psycopg2.connect(**params) as conn:
# создание объекта курсора для запуска команд PostgreSQL в базе данных
cur = conn.cursor()
cur.execute("SELECT {} FROM fact_table WHERE year = ANY(%s) AND indicators = ANY(%s) AND station_name = ANY(%s);"
.format(",".join(["\"{}\"".format(c) for c in columns])),(selected_years, selected_indicators, selected_stations))
# Для получения доступа к сформированной выборке используем cur.fetchall()
rows = cur.fetchall()
cur.close()
127.0.0.1 - - [18/May/2023 11:06:08] "POST / HTTP/1.1" 200 -
127.0.0.1 - - [18/May/2023 11:06:08] "GET /css/bootstrap.min.css HTTP/1.1" 404 -
127.0.0.1 - - [18/May/2023 11:06:08] "GET /js/jquery.min.js HTTP/1.1" 404 -
127.0.0.1 - - [18/May/2023 11:06:08] "GET /js/bootstrap.min.js HTTP/1.1" 404 -
127.0.0.1 - - [18/May/2023 11:06:08] "GET /css/bootstrap-multiselect.css HTTP/1.1" 404 -
127.0.0.1 - - [18/May/2023 11:06:08] "GET /js/bootstrap-multiselect.js HTTP/1.1" 404 -
127.0.0.1 - - [18/May/2023 11:06:08] "GET /css/bootstrap.min.css HTTP/1.1" 404 -
127.0.0.1 - - [18/May/2023 11:06:08] "GET /js/jquery.min.js HTTP/1.1" 404 -
127.0.0.1 - - [18/May/2023 11:06:08] "GET /js/bootstrap.min.js HTTP/1.1" 404 -
127.0.0.1 - - [18/May/2023 11:06:08] "GET /js/bootstrap-multiselect.js HTTP/1.1" 404 -
127.0.0.1 - - [18/May/2023 11:06:08] "GET /css/bootstrap-multiselect.css HTTP/1.1" 404 -
year = request.form.getlist("year")
year = [int(i) for i in request.form.getlist["year"] if i.isdigit()]
Traceback (most recent call last):
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 2528, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 1825, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 1823, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 1799, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\Desktop\factweb3\app.py", line 36, in index
year = [int(i) for i in request.form.getlist["year"] if i.isdigit()]
~~~~~~~~~~~~~~~~~~~~^^^^^^^^
TypeError: 'method' object is not subscriptable
['2015', '2018']
челябинск
[2023-05-15 13:11:21,365] ERROR in app: Exception on / [POST]
Traceback (most recent call last):
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 2528, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 1825, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 1823, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 1799, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\Desktop\factweb3\app.py", line 42, in index
cur.execute("SELECT * FROM fact_indicators WHERE fact_year = ANY(%s) AND fact_station_name = %s;",(year,station))
psycopg2.errors.UndefinedFunction: ОШИБКА: оператор не существует: integer = text
LINE 1: SELECT * FROM fact_indicators WHERE fact_year = ANY(ARRAY['2...
^
HINT: Оператор с данными именем и типами аргументов не найден. Возможно, вам следует добавить явные приведения типов.
if request.method == "POST":
# Получаем промежуток дат из формы
year = request.form.getlist("year")
print(year)
station = request.form["station"]
print(station)
# Форматируем даты в соответсвии с форматом в базе данных
# Запрос к БД с использованием параметров дат
cur = conn.cursor()
cur.execute("SELECT * FROM fact_indicators WHERE fact_year = ANY(%s) AND fact_station_name = %s;",(year,station))
<form method ="post" action="/">
<label for="year"></label>
<select type="number" name ="year" multiple="multiple">
['2021', '2022', '2023']
москва
[2023-05-15 12:08:30,246] ERROR in app: Exception on / [POST]
Traceback (most recent call last):
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 2528, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 1825, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 1823, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask\app.py", line 1799, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\antrodmi\Desktop\factweb3\app.py", line 42, in index
cur.execute("SELECT * FROM fact_indicators WHERE fact_year IN (%s) AND fact_station_name = %s;",(year,station))
psycopg2.errors.UndefinedFunction: ОШИБКА: оператор не существует: integer = text[]
LINE 1: SELECT * FROM fact_indicators WHERE fact_year IN (ARRAY['202...
^
HINT: Оператор с данными именем и типами аргументов не найден. Возможно, вам следует добавить явные приведения типов.
<select type="number" name ="year" multiple="multiple">
дополнительно указал тип, но ошибка не исчезла cur.execute("SELECT * FROM fact_indicators WHERE fact_year IN (%s) AND fact_station_name = %s;",(year,station))
psycopg2.errors.UndefinedFunction: ОШИБКА: оператор не существует: integer = text[]
LINE 1: SELECT * FROM fact_indicators WHERE fact_year IN (ARRAY['202...
^
HINT: Оператор с данными именем и типами аргументов не найден. Возможно, вам следует добавить явные приведения типов.
<select type="number" name ="year" multiple="multiple">
, но ошибка не исчезает