anderson-ufrj commited on
Commit
0ba7816
·
1 Parent(s): 502eaf3

feat(database): add simplified database session module

Browse files

Lightweight database session implementation:
- Basic connection management
- Simplified query execution
- Development and testing support
- Alternative to full ORM overhead

Files changed (1) hide show
  1. src/db/simple_session.py +50 -0
src/db/simple_session.py ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Simple database session management for SQLite.
3
+ """
4
+
5
+ import os
6
+ from contextlib import asynccontextmanager
7
+ from typing import AsyncGenerator
8
+
9
+ from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker
10
+ from dotenv import load_dotenv
11
+
12
+ load_dotenv()
13
+
14
+ # Get DATABASE_URL from environment
15
+ DATABASE_URL = os.getenv("DATABASE_URL", "sqlite+aiosqlite:///./cidadao_ai.db")
16
+
17
+ # Create async engine
18
+ engine = create_async_engine(
19
+ DATABASE_URL,
20
+ echo=False,
21
+ pool_pre_ping=True,
22
+ )
23
+
24
+ # Create session factory
25
+ AsyncSessionLocal = async_sessionmaker(
26
+ engine,
27
+ class_=AsyncSession,
28
+ expire_on_commit=False,
29
+ )
30
+
31
+
32
+ @asynccontextmanager
33
+ async def get_db_session() -> AsyncGenerator[AsyncSession, None]:
34
+ """Get database session context manager."""
35
+ async with AsyncSessionLocal() as session:
36
+ try:
37
+ yield session
38
+ await session.commit()
39
+ except Exception:
40
+ await session.rollback()
41
+ raise
42
+ finally:
43
+ await session.close()
44
+
45
+
46
+ # Alias for FastAPI dependency
47
+ async def get_db() -> AsyncGenerator[AsyncSession, None]:
48
+ """FastAPI dependency for database session."""
49
+ async with get_db_session() as session:
50
+ yield session