Fred808 commited on
Commit
f78efc5
·
verified ·
1 Parent(s): 3e24ce6

Update app/db/database.py

Browse files
Files changed (1) hide show
  1. app/db/database.py +67 -55
app/db/database.py CHANGED
@@ -1,55 +1,67 @@
1
- from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
2
- from sqlalchemy.orm import declarative_base
3
- from ..core.config import settings
4
- import contextlib
5
-
6
- # Create async engine for FastAPI
7
- async_engine = create_async_engine(
8
- settings.DATABASE_URL,
9
- echo=True,
10
- future=True,
11
- pool_pre_ping=True
12
- )
13
-
14
- # Create async session factory
15
- AsyncSessionLocal = async_sessionmaker(
16
- bind=async_engine,
17
- class_=AsyncSession,
18
- expire_on_commit=False
19
- )
20
-
21
- # Create declarative base for models
22
- Base = declarative_base()
23
-
24
- # Database dependency for FastAPI routes
25
- async def get_db():
26
- async with AsyncSessionLocal() as session:
27
- try:
28
- yield session
29
- finally:
30
- await session.close()
31
-
32
- # Database access for background tasks and services
33
- class Database:
34
- def __init__(self):
35
- self._session_factory = AsyncSessionLocal
36
-
37
- @contextlib.asynccontextmanager
38
- async def session(self):
39
- """Get a database session with automatic commit/rollback"""
40
- session = self._session_factory()
41
- try:
42
- yield session
43
- await session.commit()
44
- except:
45
- await session.rollback()
46
- raise
47
- finally:
48
- await session.close()
49
-
50
- async def get_session(self):
51
- """Get a session for manual management"""
52
- return self._session_factory()
53
-
54
- # Create singleton instance for database access
55
- db = Database()
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
2
+ from sqlalchemy.orm import declarative_base
3
+ from ..core.config import settings
4
+ import contextlib
5
+
6
+ # Create async engine for FastAPI
7
+ async_engine = create_async_engine(
8
+ settings.DATABASE_URL,
9
+ echo=True,
10
+ future=True,
11
+ pool_pre_ping=True
12
+ )
13
+
14
+ # Create async session factory
15
+ AsyncSessionLocal = async_sessionmaker(
16
+ bind=async_engine,
17
+ class_=AsyncSession,
18
+ expire_on_commit=False
19
+ )
20
+
21
+ # Create declarative base for models
22
+ Base = declarative_base()
23
+
24
+ # Database dependency for FastAPI routes
25
+ async def get_db():
26
+ async with AsyncSessionLocal() as session:
27
+ try:
28
+ yield session
29
+ finally:
30
+ await session.close()
31
+
32
+ # Database access for background tasks and services
33
+ class Database:
34
+ def __init__(self):
35
+ self._session_factory = AsyncSessionLocal
36
+
37
+ @contextlib.asynccontextmanager
38
+ async def session(self):
39
+ """Get a database session with automatic commit/rollback"""
40
+ session = self._session_factory()
41
+ try:
42
+ yield session
43
+ await session.commit()
44
+ except:
45
+ await session.rollback()
46
+ raise
47
+ finally:
48
+ await session.close()
49
+
50
+ async def get_session(self):
51
+ """Get a session for manual management"""
52
+ return self._session_factory()
53
+
54
+ from sqlalchemy.ext.asyncio import async_sessionmaker
55
+ from sqlalchemy import text
56
+ from .database import async_session_maker # if it's in the same file, remove this line
57
+
58
+ async def verify_connection():
59
+ async with async_session_maker() as session:
60
+ try:
61
+ await session.execute(text("SELECT 1"))
62
+ except Exception as e:
63
+ raise ConnectionError(f"Database connection verification failed: {str(e)}")
64
+
65
+
66
+ # Create singleton instance for database access
67
+ db = Database()