HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/PraisonAI/docs/tools/duckdb_tools.mdx
---
title: "DuckDB Agent"
description: "DuckDB database tools for AI agents."
icon: "database"
---

<Note>
  **Prerequisites**
  - Python 3.10 or higher
  - PraisonAI Agents package installed
  - `duckdb` package installed
  - Basic understanding of SQL and databases
</Note>

## DuckDB Tools

Use DuckDB Tools to manage and query databases with AI agents.

<Steps>
  <Step title="Install Dependencies">
    First, install the required packages:
    ```bash
    pip install praisonaiagents duckdb
    ```
  </Step>

  <Step title="Import Components">
    Import the necessary components:
    ```python
    from praisonaiagents import Agent, Task, PraisonAIAgents
    from praisonaiagents.tools import execute_query, load_csv, export_csv
    ```
  </Step>

  <Step title="Create Agent">
    Create a DuckDB database agent:
    ```python
    db_agent = Agent(
        name="DBProcessor",
        role="Database Management Specialist",
        goal="Manage and query databases efficiently.",
        backstory="Expert in database operations and SQL.",
        tools=[execute_query, load_csv, export_csv],
        self_reflect=False
    )
    ```
  </Step>

  <Step title="Define Task">
    Define the database task:
    ```python
    db_task = Task(
        description="Query and analyze database data.",
        expected_output="Query results and analysis.",
        agent=db_agent,
        name="db_analysis"
    )
    ```
  </Step>

  <Step title="Run Agent">
    Initialize and run the agent:
    ```python
    agents = PraisonAIAgents(
        agents=[db_agent],
        tasks=[db_task],
        process="sequential"
    )
    agents.start()
    ```
  </Step>
</Steps>

## Available Functions

```python
from praisonaiagents.tools import execute_query
from praisonaiagents.tools import load_csv
from praisonaiagents.tools import export_csv
```

## Function Details

### execute_query(query: str, params: Optional[Union[tuple, dict]] = None, return_df: bool = True)

Executes SQL queries with advanced features:
- Supports parameterized queries
- Returns results as DataFrame records or raw tuples
- Full SQL query support (SELECT, INSERT, UPDATE, DELETE, etc.)
- Automatic connection management

```python
# Basic SELECT query
results = execute_query("SELECT * FROM employees")

# Parameterized query
results = execute_query(
    "SELECT * FROM employees WHERE department = ? AND salary > ?",
    params=('Engineering', 75000)
)

# Named parameters
results = execute_query(
    "SELECT * FROM employees WHERE department = :dept",
    params={'dept': 'Engineering'}
)
# Returns: List[Dict[str, Any]]
# Example: [{"id": 1, "name": "Alice", "department": "Engineering"}, ...]
```

### load_csv(table_name: str, filepath: str, schema: Optional[Dict[str, str]] = None, if_exists: str = 'replace')

Loads CSV files into DuckDB tables:
- Optional schema definition
- Flexible table existence handling
- Automatic type inference
- Support for large files

```python
# Basic usage - auto schema inference
success = load_csv("employees", "employees.csv")

# With custom schema
schema = {
    "id": "INTEGER PRIMARY KEY",
    "name": "VARCHAR",
    "salary": "DECIMAL(10,2)",
    "hire_date": "DATE"
}
success = load_csv(
    "employees",
    "employees.csv",
    schema=schema,
    if_exists='replace'
)
# Returns: bool (True if successful)
```

### export_csv(query: str, filepath: str, params: Optional[Union[tuple, dict]] = None)

Exports query results to CSV files:
- Supports parameterized queries
- Automatic header generation
- Configurable output formatting
- Large result set handling

```python
# Export simple query results
success = export_csv(
    "SELECT * FROM employees",
    "exported_employees.csv"
)

# Export filtered data with parameters
success = export_csv(
    "SELECT * FROM employees WHERE department = ? AND year = ?",
    "eng_2023.csv",
    params=('Engineering', 2023)
)
# Returns: bool (True if successful)
```

## Understanding DuckDB Tools

<Card title="What are DuckDB Tools?" icon="question">
  DuckDB Tools provide database capabilities for AI agents:
  - SQL query execution
  - Data import/export
  - Schema management
  - Data analysis
  - Performance optimization
</Card>

## Key Components

<CardGroup cols={2}>
  <Card title="DB Agent" icon="user-robot">
    Create specialized database agents:
    ```python
    Agent(tools=[execute_query, load_csv, export_csv])
    ```
  </Card>
  <Card title="DB Task" icon="list-check">
    Define database tasks:
    ```python
    Task(description="db_operation")
    ```
  </Card>
  <Card title="Process Types" icon="arrows-split-up-and-left">
    Sequential or parallel processing:
    ```python
    process="sequential"
    ```
  </Card>
  <Card title="DB Options" icon="sliders">
    Customize database parameters:
    ```python
    read_only=True, memory=True
    ```
  </Card>
</CardGroup>

## Examples

### Basic Database Agent

```python
from praisonaiagents import Agent, Task, PraisonAIAgents
from praisonaiagents.tools import execute_query, load_csv, export_csv

# Create database agent
db_agent = Agent(
    name="DBExpert",
    role="Database Specialist",
    goal="Query and analyze data efficiently.",
    backstory="Expert in database management and SQL.",
    tools=[execute_query, load_csv, export_csv],
    self_reflect=False
)

# Define database task
db_task = Task(
    description="Analyze sales performance data.",
    expected_output="Sales analysis report.",
    agent=db_agent,
    name="sales_analysis"
)

# Run agent
agents = PraisonAIAgents(
    agents=[db_agent],
    tasks=[db_task],
    process="sequential"
)
agents.start()
```

### Advanced Database Operations with Multiple Agents

```python
# Create query agent
query_agent = Agent(
    name="QueryProcessor",
    role="SQL Query Specialist",
    goal="Execute SQL queries efficiently.",
    tools=[execute_query],
    self_reflect=False
)

# Create data import/export agent
data_agent = Agent(
    name="DataProcessor",
    role="Data Import/Export Specialist",
    goal="Handle data import and export operations efficiently.",
    tools=[load_csv, export_csv],
    self_reflect=False
)
```

## Dependencies

The DuckDB tools require the following Python packages:
- duckdb: For database operations
- pandas: For data manipulation and CSV handling

These will be automatically installed when needed.

## Example Agent Configuration

```python
from praisonaiagents import Agent
from praisonaiagents.tools import execute_query, load_csv, export_csv

agent = Agent(
    name="DBProcessor",
    description="An agent that works with DuckDB databases",
    tools=[execute_query, load_csv, export_csv]
)
```

## Error Handling

All functions include comprehensive error handling:
- Database connection errors
- Query syntax errors
- File I/O errors
- Schema validation errors
- Missing dependency errors

Errors are logged and returned in a consistent format:
- Success cases return the expected data type
- Error cases return a dict with an "error" key containing the error message

## Common Use Cases

1. Data Analysis:
```python
# Load data
load_csv("sales", "sales_data.csv")

# Analyze with SQL
results = execute_query("""
    SELECT 
        department,
        COUNT(*) as count,
        AVG(salary) as avg_salary
    FROM employees
    GROUP BY department
    HAVING count > 5
    ORDER BY avg_salary DESC
""")
```

2. Data Export:
```python
# Export filtered and aggregated data
export_csv("""
    SELECT 
        date_trunc('month', date) as month,
        SUM(amount) as total_sales
    FROM sales
    GROUP BY 1
    ORDER BY 1
""", "monthly_sales.csv")
```

3. Data Transformation:
```python
# Load and transform data
load_csv("raw_data", "input.csv")
execute_query("""
    CREATE TABLE transformed AS
    SELECT 
        id,
        UPPER(name) as name,
        ROUND(amount, 2) as amount,
        DATE_TRUNC('day', timestamp) as date
    FROM raw_data
""")
export_csv("SELECT * FROM transformed", "transformed.csv")
```

## Best Practices

<AccordionGroup>
  <Accordion title="Agent Configuration">
    Configure agents with clear database focus:
    ```python
    Agent(
        name="DBProcessor",
        role="Database Specialist",
        goal="Process queries accurately and efficiently",
        tools=[execute_query, load_csv, export_csv]
    )
    ```
  </Accordion>

  <Accordion title="Task Definition">
    Define specific database operations:
    ```python
    Task(
        description="Query sales data and generate reports",
        expected_output="Sales performance report"
    )
    ```
  </Accordion>
</AccordionGroup>

## Common Patterns

### Database Operation Pipeline
```python
# Query agent
querier = Agent(
    name="Querier",
    role="SQL Specialist",
    tools=[execute_query]
)

# Analysis agent
analyzer = Agent(
    name="Analyzer",
    role="Data Analyst"
)

# Define tasks
query_task = Task(
    description="Execute SQL queries",
    agent=querier
)

analyze_task = Task(
    description="Analyze query results",
    agent=analyzer
)

# Run workflow
agents = PraisonAIAgents(
    agents=[querier, analyzer],
    tasks=[query_task, analyze_task]
)