> ## Documentation Index
> Fetch the complete documentation index at: /docs/llms.txt
> Use this file to discover all available pages before exploring further.

# configurations

# `prefect.server.database.configurations`

## Classes

### `ConnectionTracker` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L56](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L56)</sup>

A test utility which tracks the connections given out by a connection pool, to
make it easy to see which connections are currently checked out and open.

**Methods:**

#### `clear` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L110](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L110)</sup>

```python theme={null}
clear(self) -> None
```

#### `on_close` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L89](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L89)</sup>

```python theme={null}
on_close(self, adapted_connection: AdaptedConnection, connection_record: ConnectionPoolEntry) -> None
```

#### `on_close_detached` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L100](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L100)</sup>

```python theme={null}
on_close_detached(self, adapted_connection: AdaptedConnection) -> None
```

#### `on_connect` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L80](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L80)</sup>

```python theme={null}
on_connect(self, adapted_connection: AdaptedConnection, connection_record: ConnectionPoolEntry) -> None
```

#### `track_pool` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L75](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L75)</sup>

```python theme={null}
track_pool(self, pool: sa.pool.Pool) -> None
```

### `BaseDatabaseConfiguration` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L121](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L121)</sup>

Abstract base class used to inject database connection configuration into Prefect.

This configuration is responsible for defining how Prefect REST API creates and manages
database connections and sessions.

**Methods:**

#### `begin_transaction` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L212](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L212)</sup>

```python theme={null}
begin_transaction(self, session: AsyncSession, with_for_update: bool = False) -> AbstractAsyncContextManager[AsyncSessionTransaction]
```

Enter a transaction for a session

#### `create_db` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L196](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L196)</sup>

```python theme={null}
create_db(self, connection: AsyncConnection, base_metadata: sa.MetaData) -> None
```

Create the database

#### `drop_db` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L202](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L202)</sup>

```python theme={null}
drop_db(self, connection: AsyncConnection, base_metadata: sa.MetaData) -> None
```

Drop the database

#### `engine` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L186](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L186)</sup>

```python theme={null}
engine(self) -> AsyncEngine
```

Returns a SqlAlchemy engine

#### `is_inmemory` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L208](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L208)</sup>

```python theme={null}
is_inmemory(self) -> bool
```

Returns true if database is run in memory

#### `session` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L190](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L190)</sup>

```python theme={null}
session(self, engine: AsyncEngine) -> AsyncSession
```

Retrieves a SQLAlchemy session for an engine.

#### `unique_key` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L179](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L179)</sup>

```python theme={null}
unique_key(self) -> tuple[Hashable, ...]
```

Returns a key used to determine whether to instantiate a new DB interface.

### `AsyncPostgresConfiguration` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L219](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L219)</sup>

**Methods:**

#### `begin_transaction` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L420](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L420)</sup>

```python theme={null}
begin_transaction(self, session: AsyncSession, with_for_update: bool = False) -> AsyncGenerator[AsyncSessionTransaction, None]
```

#### `begin_transaction` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L212](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L212)</sup>

```python theme={null}
begin_transaction(self, session: AsyncSession, with_for_update: bool = False) -> AbstractAsyncContextManager[AsyncSessionTransaction]
```

Enter a transaction for a session

#### `create_db` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L428](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L428)</sup>

```python theme={null}
create_db(self, connection: AsyncConnection, base_metadata: sa.MetaData) -> None
```

Create the database

#### `create_db` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L196](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L196)</sup>

```python theme={null}
create_db(self, connection: AsyncConnection, base_metadata: sa.MetaData) -> None
```

Create the database

#### `drop_db` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L435](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L435)</sup>

```python theme={null}
drop_db(self, connection: AsyncConnection, base_metadata: sa.MetaData) -> None
```

Drop the database

#### `drop_db` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L202](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L202)</sup>

```python theme={null}
drop_db(self, connection: AsyncConnection, base_metadata: sa.MetaData) -> None
```

Drop the database

#### `engine` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L220](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L220)</sup>

```python theme={null}
engine(self) -> AsyncEngine
```

Retrieves an async SQLAlchemy engine.

**Returns:**

* a SQLAlchemy engine

#### `engine` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L186](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L186)</sup>

```python theme={null}
engine(self) -> AsyncEngine
```

Returns a SqlAlchemy engine

#### `is_inmemory` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L442](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L442)</sup>

```python theme={null}
is_inmemory(self) -> bool
```

Returns true if database is run in memory

#### `is_inmemory` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L208](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L208)</sup>

```python theme={null}
is_inmemory(self) -> bool
```

Returns true if database is run in memory

#### `schedule_engine_disposal` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L386](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L386)</sup>

```python theme={null}
schedule_engine_disposal(self, cache_key: _EngineCacheKey) -> None
```

Dispose of an engine once the event loop is closing.

See caveats at `add_event_loop_shutdown_callback`.

We attempted to lazily clean up old engines when new engines are created, but
if the loop the engine is attached to is already closed then the connections
cannot be cleaned up properly and warnings are displayed.

Engine disposal should only be important when running the application
ephemerally. Notably, this is an issue in our tests where many short-lived event
loops and engines are created which can consume all of the available database
connection slots. Users operating at a scale where connection limits are
encountered should be encouraged to use a standalone server.

#### `session` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L410](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L410)</sup>

```python theme={null}
session(self, engine: AsyncEngine) -> AsyncSession
```

Retrieves a SQLAlchemy session for an engine.

**Args:**

* `engine`: a sqlalchemy engine

#### `session` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L190](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L190)</sup>

```python theme={null}
session(self, engine: AsyncEngine) -> AsyncSession
```

Retrieves a SQLAlchemy session for an engine.

#### `unique_key` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L179](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L179)</sup>

```python theme={null}
unique_key(self) -> tuple[Hashable, ...]
```

Returns a key used to determine whether to instantiate a new DB interface.

### `AioSqliteConfiguration` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L448](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L448)</sup>

**Methods:**

#### `begin_sqlite_conn` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L585](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L585)</sup>

```python theme={null}
begin_sqlite_conn(self, conn: aiosqlite.AsyncAdapt_aiosqlite_connection) -> None
```

#### `begin_sqlite_stmt` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L594](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L594)</sup>

```python theme={null}
begin_sqlite_stmt(self, conn: sa.Connection) -> None
```

#### `begin_transaction` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L607](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L607)</sup>

```python theme={null}
begin_transaction(self, session: AsyncSession, with_for_update: bool = False) -> AsyncGenerator[AsyncSessionTransaction, None]
```

#### `begin_transaction` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L212](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L212)</sup>

```python theme={null}
begin_transaction(self, session: AsyncSession, with_for_update: bool = False) -> AbstractAsyncContextManager[AsyncSessionTransaction]
```

Enter a transaction for a session

#### `create_db` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L627](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L627)</sup>

```python theme={null}
create_db(self, connection: AsyncConnection, base_metadata: sa.MetaData) -> None
```

Create the database

#### `create_db` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L196](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L196)</sup>

```python theme={null}
create_db(self, connection: AsyncConnection, base_metadata: sa.MetaData) -> None
```

Create the database

#### `drop_db` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L634](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L634)</sup>

```python theme={null}
drop_db(self, connection: AsyncConnection, base_metadata: sa.MetaData) -> None
```

Drop the database

#### `drop_db` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L202](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L202)</sup>

```python theme={null}
drop_db(self, connection: AsyncConnection, base_metadata: sa.MetaData) -> None
```

Drop the database

#### `engine` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L452](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L452)</sup>

```python theme={null}
engine(self) -> AsyncEngine
```

Retrieves an async SQLAlchemy engine.

**Returns:**

* a SQLAlchemy engine

#### `engine` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L186](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L186)</sup>

```python theme={null}
engine(self) -> AsyncEngine
```

Returns a SqlAlchemy engine

#### `is_inmemory` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L641](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L641)</sup>

```python theme={null}
is_inmemory(self) -> bool
```

Returns true if database is run in memory

#### `is_inmemory` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L208](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L208)</sup>

```python theme={null}
is_inmemory(self) -> bool
```

Returns true if database is run in memory

#### `schedule_engine_disposal` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L510](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L510)</sup>

```python theme={null}
schedule_engine_disposal(self, cache_key: _EngineCacheKey) -> None
```

Dispose of an engine once the event loop is closing.

See caveats at `add_event_loop_shutdown_callback`.

We attempted to lazily clean up old engines when new engines are created, but
if the loop the engine is attached to is already closed then the connections
cannot be cleaned up properly and warnings are displayed.

Engine disposal should only be important when running the application
ephemerally. Notably, this is an issue in our tests where many short-lived event
loops and engines are created which can consume all of the available database
connection slots. Users operating at a scale where connection limits are
encountered should be encouraged to use a standalone server.

#### `session` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L618](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L618)</sup>

```python theme={null}
session(self, engine: AsyncEngine) -> AsyncSession
```

Retrieves a SQLAlchemy session for an engine.

**Args:**

* `engine`: a sqlalchemy engine

#### `session` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L190](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L190)</sup>

```python theme={null}
session(self, engine: AsyncEngine) -> AsyncSession
```

Retrieves a SQLAlchemy session for an engine.

#### `setup_sqlite` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L534](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L534)</sup>

```python theme={null}
setup_sqlite(self, conn: DBAPIConnection, record: ConnectionPoolEntry) -> None
```

Issue PRAGMA statements to SQLITE on connect. PRAGMAs only last for the
duration of the connection. See [https://www.sqlite.org/pragma.html](https://www.sqlite.org/pragma.html) for more info.

#### `unique_key` <sup>[https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L179](https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/database/configurations.py#L179)</sup>

```python theme={null}
unique_key(self) -> tuple[Hashable, ...]
```

Returns a key used to determine whether to instantiate a new DB interface.
