Storages

Storages out of the box

MemoryStorage

class aiogram.fsm.storage.memory.MemoryStorage[source]

Default FSM storage, stores all data in dict and loss everything on shutdown

Warning

Is not recommended using in production in due to you will lose all data when your bot restarts

__init__() None[source]

RedisStorage

class aiogram.fsm.storage.redis.RedisStorage(redis: ~redis.asyncio.client.Redis, key_builder: ~aiogram.fsm.storage.base.KeyBuilder | None = None, state_ttl: int | ~datetime.timedelta | None = None, data_ttl: int | ~datetime.timedelta | None = None, json_loads: ~typing.Callable[[...], ~typing.Any] = <function loads>, json_dumps: ~typing.Callable[[...], str] = <function dumps>)[source]

Redis storage required redis package installed (pip install redis)

__init__(redis: ~redis.asyncio.client.Redis, key_builder: ~aiogram.fsm.storage.base.KeyBuilder | None = None, state_ttl: int | ~datetime.timedelta | None = None, data_ttl: int | ~datetime.timedelta | None = None, json_loads: ~typing.Callable[[...], ~typing.Any] = <function loads>, json_dumps: ~typing.Callable[[...], str] = <function dumps>) None[source]
Parameters:
  • redis – Instance of Redis connection

  • key_builder – builder that helps to convert contextual key to string

  • state_ttl – TTL for state records

  • data_ttl – TTL for data records

classmethod from_url(url: str, connection_kwargs: Dict[str, Any] | None = None, **kwargs: Any) RedisStorage[source]

Create an instance of RedisStorage with specifying the connection string

Parameters:
  • url – for example redis://user:password@host:port/db

  • connection_kwargs – see redis docs

  • kwargs – arguments to be passed to RedisStorage

Returns:

an instance of RedisStorage

MongoStorage

class aiogram.fsm.storage.mongo.MongoStorage(client: AsyncIOMotorClient, key_builder: KeyBuilder | None = None, db_name: str = 'aiogram_fsm', collection_name: str = 'states_and_data')[source]

MongoDB storage required motor package installed (pip install motor)

__init__(client: AsyncIOMotorClient, key_builder: KeyBuilder | None = None, db_name: str = 'aiogram_fsm', collection_name: str = 'states_and_data') None[source]
Parameters:
  • client – Instance of AsyncIOMotorClient

  • key_builder – builder that helps to convert contextual key to string

  • db_name – name of the MongoDB database for FSM

  • collection_name – name of the collection for storing FSM states and data

classmethod from_url(url: str, connection_kwargs: Dict[str, Any] | None = None, **kwargs: Any) MongoStorage[source]

Create an instance of MongoStorage with specifying the connection string

Parameters:
  • url – for example mongodb://user:password@host:port

  • connection_kwargs – see motor docs

  • kwargs – arguments to be passed to MongoStorage

Returns:

an instance of MongoStorage

KeyBuilder

Keys inside Redis and Mongo storages can be customized via key builders:

class aiogram.fsm.storage.base.KeyBuilder[source]

Base class for key builder.

abstract build(key: StorageKey, part: Literal['data', 'state', 'lock'] | None = None) str[source]

Build key to be used in storage’s db queries

Parameters:
  • key – contextual key

  • part – part of the record

Returns:

key to be used in storage’s db queries

class aiogram.fsm.storage.base.DefaultKeyBuilder(*, prefix: str = 'fsm', separator: str = ':', with_bot_id: bool = False, with_business_connection_id: bool = False, with_destiny: bool = False)[source]

Simple key builder with default prefix.

Generates a colon-joined string with prefix, chat_id, user_id, optional bot_id, business_connection_id, destiny and field.

Format:

<prefix>:<bot_id?>:<business_connection_id?>:<chat_id>:<user_id>:<destiny?>:<field?>

build(key: StorageKey, part: Literal['data', 'state', 'lock'] | None = None) str[source]

Build key to be used in storage’s db queries

Parameters:
  • key – contextual key

  • part – part of the record

Returns:

key to be used in storage’s db queries

Writing own storages

class aiogram.fsm.storage.base.BaseStorage[source]

Base class for all FSM storages

abstract async set_state(key: StorageKey, state: str | State | None = None) None[source]

Set state for specified key

Parameters:
  • key – storage key

  • state – new state

abstract async get_state(key: StorageKey) str | None[source]

Get key state

Parameters:

key – storage key

Returns:

current state

abstract async set_data(key: StorageKey, data: Dict[str, Any]) None[source]

Write data (replace)

Parameters:
  • key – storage key

  • data – new data

abstract async get_data(key: StorageKey) Dict[str, Any][source]

Get current data for key

Parameters:

key – storage key

Returns:

current data

async update_data(key: StorageKey, data: Dict[str, Any]) Dict[str, Any][source]

Update date in the storage for key (like dict.update)

Parameters:
  • key – storage key

  • data – partial data

Returns:

new data

abstract async close() None[source]

Close storage (database connection, file or etc.)