48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
# 2026-03-11
|
|
# catalog.py — читает список продуктов из PostgreSQL.
|
|
# Таблица demo_products создаётся автоматически при первом вызове.
|
|
# Точка входа: list_products(event)
|
|
|
|
import json
|
|
import os
|
|
import psycopg2
|
|
|
|
|
|
def list_products(event):
|
|
dsn = os.environ["PG_DSN"]
|
|
conn = psycopg2.connect(dsn)
|
|
try:
|
|
with conn.cursor() as cur:
|
|
_ensure_table(cur)
|
|
conn.commit()
|
|
|
|
cur.execute("SELECT id, name, price FROM demo_products ORDER BY id")
|
|
rows = cur.fetchall()
|
|
finally:
|
|
conn.close()
|
|
|
|
products = [{"id": row[0], "name": row[1], "price": float(row[2])} for row in rows]
|
|
return {"products": products, "count": len(products)}
|
|
|
|
|
|
def _ensure_table(cur):
|
|
# Создаём таблицу и наполняем демо-данными — только один раз
|
|
cur.execute("""
|
|
CREATE TABLE IF NOT EXISTS demo_products (
|
|
id SERIAL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
price NUMERIC(10,2) NOT NULL
|
|
)
|
|
""")
|
|
cur.execute("SELECT COUNT(*) FROM demo_products")
|
|
if cur.fetchone()[0] == 0:
|
|
cur.executemany(
|
|
"INSERT INTO demo_products (name, price) VALUES (%s, %s)",
|
|
[
|
|
("Ноутбук", 89999.00),
|
|
("Мышь", 1299.00),
|
|
("Клавиатура", 3499.00),
|
|
("Монитор", 32000.00),
|
|
],
|
|
)
|