iSrSSKrSSKJr SSKJr SSKJr SSKJ r J r J r SSK J r SSKJrJr SS KJr "S S 5rg) zj Database Manager for AI Trading System Sprint 1: Foundation - Database connection and session management N)contextmanager) Generator)logger) create_engineeventtext)Engine)Session sessionmaker)Basec\rSrSrSrSS\S\4SjjrSSjrSS jr \ S\ \ SS44S j5r S\4S jrS \S\4S jrSSjrSrg)DatabaseManagerz)Manages database connections and sessionsdb_pathechocRXlX l[R"[RR U5SS9 [ SU3USS0S9Ul[R"[S5S5n[SSURS 9Ul [R"S U35 g ) zq Initialize database manager Args: db_path: Path to SQLite database file echo: Enable SQL query logging T)exist_okz sqlite:///check_same_threadF)r connect_argsconnectcfUR5nURS5 UR5 g)NzPRAGMA foreign_keys=ON)cursorexecuteclose) dbapi_connconnection_recordrs ,C:\PYTHON\Trading\src\database\db_manager.pyset_sqlite_pragma3DatabaseManager.__init__..set_sqlite_pragma+s&&&(F NN3 4 LLN) autocommit autoflushbindzDatabase manager initialized: N)rrosmakedirspathdirnamerenginer listens_forr r SessionLocalrinfo)selfrrrs r__init__DatabaseManager.__init__s   BGGOOG,t<$ "-u5     69 -  .  )EUQUQ\Q\] 4WI>?r returnNc[RRURS9 [R "S5 g![ an[R"SU35 eSnAff=f)zCreate all database tablesr#z$Database tables created successfullyz Error creating database tables: N)r metadata create_allr(rr+ Exceptionerrorr,es r create_tablesDatabaseManager.create_tables6sT  MM $ $$++ $ 6 KK> ?  LL;A3? @  =A A) A$$A)c[RRURS9 [R "S5 g![ an[R"SU35 eSnAff=f)z,Drop all database tables (use with caution!)r1zAll database tables droppedz Error dropping database tables: N)r r2drop_allr(rwarningr4r5r6s r drop_tablesDatabaseManager.drop_tables?sT  MM " " " 4 NN8 9  LL;A3? @  r:c## UR5nUv UR5 UR 5 g![a/nUR5 [R "SU35 eSnAff=f!UR 5 f=f7f)z Context manager for database sessions Usage: with db_manager.get_session() as session: # Do database operations session.query(Stock).all() zDatabase session error: N)r*commitr4rollbackrr5rr,sessionr7s r get_sessionDatabaseManager.get_sessionHst##% M NN  MMO       LL3A37 8   MMOs1B :B  A3*A..A33A66BB cUR5nUR[S55 SSS5 [R"S5 g!,(df  N%=f![ a#n[R "SU35 SnAgSnAff=f)z[ Check database connectivity Returns: True if database is accessible, False otherwise zSELECT 1NzDatabase health check: OKTzDatabase health check failed: F)rErrrr+r4r5rCs r health_checkDatabaseManager.health_check]sl !!#wZ 01$ KK3 4$#  LL9!= > s-AA A AA B 'BB  table_namecUR5nUR[SU355nUR5nUsSSS5 $!,(df  g=f![a&n[ R "SUSU35 SnAgSnAff=f)zw Get row count for a specific table Args: table_name: Name of the table Returns: Number of rows in the table zSELECT COUNT(*) FROM NzError getting count for table z: r)rErrscalarr4rr5)r,rJrDresultcountr7s rget_table_countDatabaseManager.get_table_countmsx !!#w 0Ej\.R)ST $##  LL9*RsK L s4A/A  A AAA B &BB cURR5 [R"S5 g![a#n[R "SU35 SnAgSnAff=f)zClose database enginezDatabase connection closedzError closing database: N)r(disposerr+r4r5r6s rrDatabaseManager.closesK 9 KK   ! KK4 5 9 LL3A37 8 8 9s03 A AA )r*rrr()zdata/trading_system.dbF)r/N)__name__ __module__ __qualname____firstlineno____doc__strboolr-r8r>rrr rErHintrOr__static_attributes__r rrrsq3@@d@BYwd':;(d ##&9r r)rXr$ contextlibrtypingrlogurur sqlalchemyrrrsqlalchemy.enginer sqlalchemy.ormr r src.database.modelsr rr]r rres3  %11$0$t9t9r