Why one connection often beats a pool
aiosqlite serializes operations on a single connection through a background thread. With WAL mode, this is enough for many web apps — readers and writers don't block each other at the SQLite level, and the per-connection serialization is fast enough that the bottleneck is rarely the queue.
When to consider a pool:
- You have multiple writers and writes are long-running enough to benefit from parallelism (rare with SQLite's single-writer-at-a-time semantics).
- You're running on a multi-core machine and reads can saturate one connection's serialization.
- You need separate read-only and writer connections for safety.
For most Pippa-shaped apps (and for most local-first products), a single shared connection is correct and simpler.
Tip: If you do want a pool, write a tiny one yourself with
asyncio.Queue rather than reaching for SQLAlchemy. SQLAlchemy is great when you need its query builder; for a single-file SQLite app it's usually overkill.