MySQL
If your infrastructure already runs MySQL or MariaDB, you can use it directly with Memori without setting up a separate database.
Install
pip install memori pymysql
Quick Start
from memori import Memori
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine(
"mysql+pymysql://user:password@localhost:3306/memori_db",
pool_pre_ping=True
)
SessionLocal = sessionmaker(bind=engine)
mem = Memori(conn=SessionLocal)
mem.config.storage.build()
Connection Strings
| Driver | Connection String |
|---|
| PyMySQL | mysql+pymysql://user:pass@host:3306/database |
| mysqlclient | mysql+mysqldb://user:pass@host:3306/database |
| With charset | mysql+pymysql://user:pass@host:3306/database?charset=utf8mb4 |
| With SSL | mysql+pymysql://user:pass@host:3306/database?ssl_ca=/path/to/ca.pem |
Complete Example
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from memori import Memori
from openai import OpenAI
# Setup MySQL with connection pooling
engine = create_engine(
"mysql+pymysql://user:password@localhost:3306/memori_db"
"?charset=utf8mb4",
pool_pre_ping=True,
pool_size=5,
max_overflow=10,
pool_recycle=1800
)
SessionLocal = sessionmaker(bind=engine)
# Setup Memori with OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
mem = Memori(conn=SessionLocal).llm.register(client)
mem.attribution(entity_id="user_123", process_id="my_agent")
mem.config.storage.build()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "I work at Acme Corp as a designer."}]
)
print(response.choices[0].message.content)
mem.augmentation.wait()
facts = mem.recall("workplace")
print(facts)
MariaDB
MariaDB uses the same drivers and connection strings as MySQL:
engine = create_engine(
"mysql+pymysql://user:password@mariadb-host:3306/memori_db",
pool_pre_ping=True
)
Always use charset=utf8mb4 to ensure proper Unicode support for storing text embeddings and multilingual content.
Connection Pooling
Recommended settings for production:
engine = create_engine(
"mysql+pymysql://user:password@localhost:3306/memori_db",
pool_pre_ping=True, # Check connection health
pool_size=5, # Minimum pool connections
max_overflow=10, # Additional connections under load
pool_recycle=1800 # Recycle connections after 30 min
)