Ejemplo n.º 1
0
        stale_timeout=STALE_TIMEOUT
    )

# https://fastapi.tiangolo.com/advanced/sql-databases-peewee/?h=before
class PeeweeConnectionState(peewee._ConnectionState):
    def __init__(self, **kwargs):
        super().__setattr__("_state", db_state)
        super().__init__(**kwargs)

    def __setattr__(self, name, value):
        self._state.get()[name] = value

    def __getattr__(self, name):
        return self._state.get()[name]

db._state = PeeweeConnectionState()


async def reset_db_state():
    db._state._state.set(db_state_default.copy())
    db._state.reset()


def get_db(db_state=Depends(reset_db_state)):
    try:
        db.connect()
        yield
    finally:
        if not db.is_closed():
            db.close()
Ejemplo n.º 2
0
    "conn": None,
    "ctx": None,
    "transactions": None
}
db_state = ContextVar("db_state", default=db_state_default.copy())


class PeeweeConnectionState(_ConnectionState):
    def __init__(self, **kwargs):
        super().__setattr__("_state", db_state)
        super().__init__(**kwargs)

    def __setattr__(self, name, value):
        self._state.get()[name] = value

    def __getattr__(self, name):
        return self._state.get()[name]


database = PooledMySQLDatabase(
    settings.DATABASE_NAME,
    port=settings.DATABASE_PORT,
    host=settings.DATABASE_HOST,
    user=settings.DATABASE_USER,
    password=settings.DATABASE_PASSWORD,
    # timeout=10,  # 当池满时阻塞的秒数。默认情况下,当池满时,peewee不会阻塞,而只是抛出一个异常。若要无限期阻塞,请将此值设置为0。
    # stale_timeout=300,  # 允许使用连接的秒数。
    max_connections=settings.DATABASE_POOL_SIZE)

database._state = PeeweeConnectionState()