MySQL Conversation Store
Direct MySQL conversation persistence with connection pooling
MySQL conversation store persists agent sessions and messages with automatic schema creation and connection pooling.
from praisonaiagents import Agent, MemoryConfig
from praisonaiagents import db
agent = Agent(
name="MySQL Agent",
instructions="Store conversations in MySQL",
memory=MemoryConfig(
db=db(database_url="mysql://user:pass@localhost:3306/praisonai"),
session_id="mysql-session",
))
agent.start("Hello — save this conversation")The user continues a thread; MySQL stores messages with connection pooling and auto schema.
Quick Start
- Simple Usage
bash pip install mysql-connector-python praisonaipython from praisonaiagents import Agent, MemoryConfig from praisonaiagents import db agent = Agent( name="MySQL Agent", memory=MemoryConfig( db=db(database_url="mysql://user:pass@localhost:3306/praisonai"), session_id="session-1", )) agent.start("Hello!") - With Configuration
Use
MySQLConversationStoredirectly when you need table prefixes or pool tuning:python from praisonai.persistence.conversation.mysql import MySQLConversationStore from praisonai.persistence import create_conversation_store store = MySQLConversationStore( host="localhost", port=3306, database="praisonai", user="root", password="secret", table_prefix="praison_", auto_create_tables=True, pool_size=5, ) # Or via the registry store = create_conversation_store("mysql", url="mysql://user:pass@localhost/praisonai")
How It Works
| Feature | Description |
|---|---|
| Schema management | Auto-creates sessions and messages tables (SCHEMA_VERSION = "1.0.0") |
| Connection pooling | Configurable pool_size for concurrent agents |
| URL parsing | mysql://user:pass@host:port/database format supported |
Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
url | str | None | Full MySQL URL (overrides individual options) |
host | str | "localhost" | MySQL server hostname |
port | int | 3306 | MySQL server port |
database | str | "praisonai" | Database name |
user | str | "root" | Database username |
password | str | "" | Database password |
table_prefix | str | "praison_" | Prefix for table names |
auto_create_tables | bool | True | Create tables automatically |
pool_size | int | 5 | Connection pool size |
For async workloads, use create_conversation_store("async_mysql", ...) with aiomysql.
Best Practices
Use db() for most agents
Agent( memory=MemoryConfig( db=db(database_url="mysql://..."), )) is the simplest path — no manual store wiring needed.
Set table_prefix for multi-tenancy
Isolate apps on one database with different prefixes: table_prefix="prod_" vs table_prefix="staging_".
Tune pool_size for concurrency
Increase pool_size for high-traffic deployments; use smaller pools for serverless MySQL hosts.
Use SSL in production
Append ?ssl_mode=REQUIRED to the connection URL for encrypted connections.