Untitled
unknown
python
2 years ago
2.2 kB
7
Indexable
@app.route("/order", methods=("GET",))
def order_index():
"""Show all the orders."""
error = None
try:
page = request.args.get("page", 1, type=int)
items_per_page = 2
page_start_index = (page - 1) * items_per_page
with pool.connection() as conn:
with conn.cursor(row_factory=namedtuple_row) as cur:
orders_page = cur.execute(
f"""
SELECT o.order_no, o.cust_no, STRING_AGG(c.sku, ',') AS sku_list
FROM orders o
JOIN contains c ON o.order_no=c.order_no
JOIN product p ON c.sku=p.sku
GROUP BY o.order_no
ORDER BY o.order_no DESC
LIMIT {items_per_page}
OFFSET {page_start_index};
""",
{},
).fetchall()
# fetchone(): retorna a primeira linha de resultados
# como é um count() retorna um único valor que é o count.
total_orders = cur.execute(
f"""
SELECT COUNT(DISTINCT o.order_no)
FROM orders o
JOIN contains c ON o.order_no=c.order_no
JOIN product p ON c.sku=p.sku;
""",
{},
).fetchone()[0]
#log.debug(f"Found {cur.rowcount} rows.")
# API-like response is returned to clients that request JSON explicitly (e.g., fetch)
if (
request.accept_mimetypes["application/json"]
and not request.accept_mimetypes["text/html"]
):
return jsonify(orders)
# Se dividíssemos apenas total orders / items_per_page não consideraríamos
# os possíveis iteis que não satisfazem uma página inteira e por isso fazem com que
# a divisão não seja inteira.
total_pages = (total_orders + items_per_page - 1) // items_per_page
return render_template("order/index.html", orders=orders_page, total_pages=total_pages, page = page)
except Exception as e:
return str(e)Editor is loading...