Kaballas/postgresql-hosting
0
1from fastapi import FastAPI, HTTPException2import psycopg23from psycopg2.extras import RealDictCursor4import os5 6app = FastAPI()7 8# Database connection details9DB_NAME = os.getenv("POSTGRES_DB", "mydatabase")10DB_USER = os.getenv("POSTGRES_USER", "myuser")11DB_PASSWORD = os.getenv("POSTGRES_PASSWORD", "mypassword")12DB_HOST = os.getenv("POSTGRES_HOST", "localhost")13DB_PORT = os.getenv("POSTGRES_PORT", "5432")14 15def get_db_connection():16 try:17 conn = psycopg2.connect(18 dbname=DB_NAME,19 user=DB_USER,20 password=DB_PASSWORD,21 host=DB_HOST,22 port=DB_PORT,23 cursor_factory=RealDictCursor # So we can return rows as dictionaries24 )25 return conn26 except Exception as e:27 print(f"Error connecting to the database: {e}")28 raise HTTPException(status_code=500, detail="Database connection error")29 30def create_table():31 conn = get_db_connection()32 cursor = conn.cursor()33 cursor.execute("""34 CREATE TABLE IF NOT EXISTS items (35 id SERIAL PRIMARY KEY,36 name VARCHAR(50) NOT NULL,37 description TEXT38 );39 """)40 conn.commit()41 cursor.close()42 conn.close()43 44 45@app.get("/")46def read_root():47 return {"message": "Welcome to FastAPI with PostgreSQL!"}48 49@app.get("/items/")50def read_items():51 conn = get_db_connection()52 cursor = conn.cursor()53 try:54 cursor.execute("SELECT * FROM items;")55 except Exception as e:56 print(e)57 create_table()58 cursor.execute("SELECT * FROM items;")59 items = cursor.fetchall()60 cursor.close()61 conn.close()62 63 return items64 65@app.post("/items/")66def create_item(name: str, description: str = "description"):67 conn = get_db_connection()68 cursor = conn.cursor()69 create_table()70 71 try:72 cursor.execute(73 "INSERT INTO items (name, description) VALUES (%s, %s) RETURNING id;",74 (name, description)75 )76 except Exception as e:77 print(e)78 create_table()79 cursor.execute(80 "INSERT INTO items (name, description) VALUES (%s, %s) RETURNING id;",81 (name, description)82 )83 item_id = cursor.fetchone()['id']84 conn.commit()85 cursor.close()86 conn.close()87 88 return {"id": item_id, "name": name, "description": description}89 