adk-database-memory
SQL-backed memory service for the Google Agent Development Kit (ADK).
Drop-in durable replacement for InMemoryMemoryService. Works with any async SQLAlchemy dialect: SQLite, PostgreSQL, MySQL/MariaDB, and more.
Why
ADK ships an in-memory memory service for development and a Vertex-hosted one for production on GCP. If you want durable memory on your own Postgres/SQLite/MySQL, there was no built-in option. This package fills that gap with the same BaseMemoryService contract, so you can swap it in without changing agent code.
Install
pip install adk-database-memory[sqlite] # SQLite (via aiosqlite)
pip install adk-database-memory[postgres] # PostgreSQL (via asyncpg)
pip install adk-database-memory[mysql] # MySQL / MariaDB (via aiomysql)
The base install does not pull any database driver. Pick the extra that matches your backend, or install your own async SQLAlchemy driver separately.
Quick start
import asyncio
from adk_database_memory import DatabaseMemoryService
async def main():
# SQLite, zero-config
async with DatabaseMemoryService("sqlite+aiosqlite:///memory.db") as memory:
await memory.add_session_to_memory(session)
result = await memory.search_memory(
app_name="my_app",
user_id="u1",
query="what did we decide about the pricing model?",
)
for entry in result.memories:
print(entry.author, entry.timestamp, entry.content)
asyncio.run(main())
With an ADK Runner
from google.adk.runners import Runner
from adk_database_memory import DatabaseMemoryService
memory = DatabaseMemoryService(
"postgresql+asyncpg://user:pass@localhost:5432/agentdb"
)
runner = Runner(
app_name="my_app",
agent=my_agent,
memory_service=memory,
session_service=session_service,
)
Supported backends
| Backend | URL example | Extra |
|---|---|---|
| SQLite | sqlite+aiosqlite:///memory.db |
[sqlite] |
| SQLite (in-memory) | sqlite+aiosqlite:///:memory: |
[sqlite] |
| PostgreSQL | postgresql+asyncpg://user:pass@host/db |
[postgres] |
| MySQL / MariaDB | mysql+aiomysql://user:pass@host/db |
[mysql] |
| Any async SQLAlchemy dialect | depends on driver | bring your own |
API
The service implements google.adk.memory.base_memory_service.BaseMemoryService, so it exposes the same three methods used everywhere else in ADK:
add_session_to_memory(session)- index every event of a session.add_events_to_memory(app_name, user_id, events, ...)- index a delta slice of events (useful for streaming ingestion).search_memory(app_name, user_id, query)- returnMemoryEntrys whose indexed keywords overlap with the query, scoped to the given app and user.
Constructor:
DatabaseMemoryService(
db_url: str,
*,
stop_words: set[str] | None = None, # override the default English stop-words list
**engine_kwargs, # forwarded to create_async_engine
)
Lifecycle:
async with DatabaseMemoryService(db_url) as memory:
...
# equivalent to:
memory = DatabaseMemoryService(db_url)
try:
...
finally:
await memory.close()
How it works
- On first write, a single table
adk_memory_entriesis created (lazy, with an async double-checked lock) with an index on(app_name, user_id). - Each event's text content is lower-cased, tokenized (
[A-Za-z]+), and filtered against the stop-words set to produce a keyword bag. - Search extracts keywords from the query the same way and returns rows where the bags overlap, scoped by
app_nameanduser_id, then de-duplicates on(author, text, timestamp). - JSON content is stored as
JSONBon PostgreSQL,LONGTEXTon MySQL, andTEXTon SQLite/others via aDynamicJSONtype decorator.
This is intentionally the same keyword-matching approach as the in-memory and Firestore memory services in ADK; it is a durable, zero-infra starting point, not a semantic retriever. If you need embedding-based recall, pair this package with Vertex AI Memory Bank or a vector store.
Development
git clone https://github.com/anmolg1997/adk-database-memory
cd adk-database-memory
pip install -e ".[dev]"
pytest
ruff check .
mypy src
License
Apache 2.0 - see LICENSE.
Related
- google/adk-python - core Agent Development Kit.
FirestoreSessionService(PR #5088) - the sibling Firestore session service this memory service's keyword-index approach mirrors.
Metadata
Release files for adk-database-memory 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| adk_database_memory-0.1.0.tar.gz | 14.4 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| adk_database_memory-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.8 kB
Release files / adk_database_memory-0.1.0.tar.gz
| Download URL | adk_database_memory-0.1.0.tar.gz |
|---|---|
| Size | 14.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d46b6b40d6f26fce141085c9c31425d34a767cc82e0c3e3a95d3c026f29d4738
|
|
BLAKE2b-256 checksum How to use checksums |
5d374bfb6d98ea919803d0db33726022c76f5586ad15a5ab158e30fb5192bb16
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 21, 2026.
Transparency logRelease files / adk_database_memory-0.1.0-py3-none-any.whl
| Download URL | adk_database_memory-0.1.0-py3-none-any.whl |
|---|---|
| Size | 18.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5ecf5d9d198a7ebf9846375a3dfe79cd4fa8e3c83719a46f3902ddb6a92855cb
|
|
BLAKE2b-256 checksum How to use checksums |
228a99bc9c2eb4a01978d01787706e4bdbb21351d0efc18ae54a63365e5c0e5c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 21, 2026.
Transparency logSecurity for adk-database-memory 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for adk_database_memory-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.