
    iK                     >   U d Z ddlmZ ddlmZmZmZmZ ddlm	Z	 ddl
mZ  G d de	      Zej                  j                  d      Zd	d
iZeed<   esej'                  ddd        eej                  fi eZeed<    eeed
d
      Zee   ed<   deedf   fdZy)u  
資料庫連線管理(SQLAlchemy 2.0 async)。

設計重點:
  1. 使用 async 引擎,FastAPI 是 async 框架,不用 async 等於浪費效能。
  2. AsyncSession 透過 FastAPI dependency injection 注入到 endpoint。
  3. 每個請求一個 session,請求結束自動關閉。
    )AsyncGenerator)AsyncEngineAsyncSessionasync_sessionmakercreate_async_engine)DeclarativeBase)settingsc                       e Zd ZdZy)Baseu   SQLAlchemy 的 declarative base。

    所有資料表 Model(例如 User)都繼承 Base,
    Alembic 會用 Base.metadata 自動偵測資料表變化、產生 migration。
    N)__name__
__module____qualname____doc__     0/volume1/homes/robertsu/coba/app/app/database.pyr   r      s    
 	r   r   sqliteechoF_engine_kwargsT
      )pool_pre_ping	pool_sizemax_overflowengine)bindclass_expire_on_commit	autoflushAsyncSessionLocalreturnNc                    K   t               4 d{   } 	 |  ddd      d{    y7 # t        $ r | j                          d{  7    w xY w7 .# 1 d{  7  sw Y   yxY ww)u   提供 AsyncSession 給 endpoint 使用。

    用法(在 endpoint 函式參數):
        async def some_endpoint(db: AsyncSession = Depends(get_db)):
            ...

    yield 後面的 async with 自動處理 commit/rollback/close。
    N)r    	Exceptionrollback)sessions    r   get_dbr&   >   s]      !""g	M #""  	""$$$	 #"""s[   A--A-A/A-AA-AAAAA-A*A!A*&A-)r   typingr   sqlalchemy.ext.asyncior   r   r   r   sqlalchemy.ormr   
app.configr	   r   DATABASE_URL
startswith
_is_sqliter   dict__annotations__updater   r    r&   r   r   r   <module>r1      s    " e e * 	? 	 ""--h7

E     *(*?*?R>R R
 7I		7 %l3 n\4%78 r   