MySQL Persistence

SQL database persistence with connection pooling and auto schema creation

MySQL persists agent conversations with automatic schema creation and connection pooling.

python
from praisonaiagents import Agent, MemoryConfig
from praisonaiagents import db

agent = Agent(
    name="MySQLBot",
    instructions="You are a helpful assistant.",
    memory=MemoryConfig(
        db=db(database_url="mysql://user:pass@localhost:3306/praisonai"),
        session_id="mysql-session",
    ))
agent.start("Hello — save this to MySQL")

The user resumes a session; MySQL persists the full conversation history.

Diagram

🤖 Agent

🗃️ MySQL Store

🔗 Connection Pool

🐬 MySQL

Quick Start

  1. Simple Usage
    bash
    pip install mysql-connector-python praisonai
    python
    from praisonaiagents import Agent, MemoryConfig
    from praisonaiagents import db
    
    agent = Agent(
        name="MySQLBot",
        memory=MemoryConfig(
            db=db(database_url="mysql://user:pass@localhost:3306/praisonai"),
            session_id="session-1",
        ))
    agent.start("Hello!")
  2. With Configuration
    python
    from praisonai.persistence.conversation.mysql import MySQLConversationStore
    
    store = MySQLConversationStore(
        host="localhost",
        port=3306,
        database="praisonai",
        user="root",
        password="secret",
        table_prefix="praison_",
        auto_create_tables=True,
        pool_size=10,
    )

How It Works

Diagram
MySQLMySQLConversationStoreAgentMySQLMySQLConversationStoreAgentsave messageCREATE TABLE IF NOT EXISTSINSERT (pooled connection)persisted
TablePurpose
praison_sessionsSession metadata
praison_messagesConversation history

Configuration Options

OptionTypeDefaultDescription
urlstrNoneFull MySQL URL (overrides individual options)
hoststr"localhost"MySQL server hostname
portint3306MySQL server port
databasestr"praisonai"Database name
userstr"root"Database username
passwordstr""Database password
table_prefixstr"praison_"Prefix for table names
auto_create_tablesboolTrueCreate tables automatically
pool_sizeint5Connection pool size

URL formats

python
db(database_url="mysql://user:pass@localhost:3306/praisonai")
db(database_url="mysql://user:pass@host:3306/db?charset=utf8mb4")

For async workloads, use create_conversation_store("async_mysql", ...).


Best Practices

Use db() for most agents

Agent( memory=MemoryConfig( db=db(database_url="mysql://..."), )) handles store wiring — no manual setup 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.


Related