MySQLDb stores a Workflow’s sessions and run history in MySQL.
Usage
Install thesqlalchemy, pymysql, openai, and ddgs packages:
uv pip install sqlalchemy pymysql openai ddgs
Run MySQL
Install Docker Desktop, then start MySQL on port3306:
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=ai \
-e MYSQL_DATABASE=ai \
-e MYSQL_USER=ai \
-e MYSQL_PASSWORD=ai \
-p 3306:3306 \
mysql:8
mysql_for_workflow.py
from agno.agent import Agent
from agno.db.mysql import MySQLDb
from agno.models.openai import OpenAIResponses
from agno.team import Team
from agno.tools.hackernews import HackerNewsTools
from agno.tools.websearch import WebSearchTools
from agno.workflow.step import Step
from agno.workflow.workflow import Workflow
db_url = "mysql+pymysql://ai:ai@localhost:3306/ai"
db = MySQLDb(db_url=db_url)
hackernews_agent = Agent(
name="HackerNews Agent",
model=OpenAIResponses(id="gpt-5.2"),
tools=[HackerNewsTools()],
role="Extract key insights and content from HackerNews posts",
)
web_agent = Agent(
name="Web Agent",
model=OpenAIResponses(id="gpt-5.2"),
tools=[WebSearchTools()],
role="Search the web for the latest news and trends",
)
research_team = Team(
name="Research Team",
members=[hackernews_agent, web_agent],
instructions="Research tech topics from HackerNews and the web",
)
content_planner = Agent(
name="Content Planner",
model=OpenAIResponses(id="gpt-5.2"),
instructions=[
"Plan a content schedule over 4 weeks for the provided topic and research content",
"Ensure that I have posts for 3 posts per week",
],
)
research_step = Step(
name="Research Step",
team=research_team,
)
content_planning_step = Step(
name="Content Planning Step",
agent=content_planner,
)
if __name__ == "__main__":
content_creation_workflow = Workflow(
name="Content Creation Workflow",
description="Automated content creation from blog posts to social media",
db=db,
steps=[research_step, content_planning_step],
)
content_creation_workflow.print_response(
input="AI trends in 2024",
markdown=True,
)
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
id | Optional[str] | None | Database ID. Derived from the connection and schema when omitted. |
db_engine | Optional[Engine] | None | SQLAlchemy database engine. Provide this or db_url. |
db_schema | Optional[str] | None | Database schema. Uses "ai" when omitted. |
db_url | Optional[str] | None | Database URL. Provide this or db_engine. |
session_table | Optional[str] | None | Table for Agent, Team, and Workflow sessions. Uses "agno_sessions" when omitted. |
memory_table | Optional[str] | None | Table for memories. Uses "agno_memories" when omitted. |
metrics_table | Optional[str] | None | Table for metrics. Uses "agno_metrics" when omitted. |
eval_table | Optional[str] | None | Table for evaluation run data. Uses "agno_eval_runs" when omitted. |
knowledge_table | Optional[str] | None | Table for knowledge content. Uses "agno_knowledge" when omitted. |
culture_table | Optional[str] | None | Table for cultural knowledge. Uses "agno_culture" when omitted. |
traces_table | Optional[str] | None | Table for traces. Uses "agno_traces" when omitted. |
spans_table | Optional[str] | None | Table for spans. Uses "agno_spans" when omitted. |
versions_table | Optional[str] | None | Table for schema versions. Uses "agno_schema_versions" when omitted. |
create_schema | bool | True | Create the database schema when it does not exist. Set to False when migrations manage it. |