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#

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.)