# hooks

The second required parameter for all `run` functions is `hooks`:

{% tabs %}
{% tab title="Class-based tasks" %}

```python
# modules/hello_world.py

import prism.task
import prism.target

class HelloWorld(prism.task.PrismTask):
    
    def run(self, tasks, hooks):
        test_str = "Hello, world!"
        return test_str
```

{% endtab %}

{% tab title="Function-based tasks" %}

```python
# modules/hello_world.py

from prism.decorators import task

@task()
def hello_world(tasks, hooks):
    test_str = "Hello, world!"
    return test_str
```

{% endtab %}
{% endtabs %}

This parameter is an instance of the `PrismHooks` class, a high-level interface that lets you quickly and easily talk to external connections without having to write low-level code or use special libraries.

The following hooks are available to Prism users:

* [`hooks.sql()`](https://docs.runprism.com/v0.2.7/fundamentals/tasks/hooks/hooks.sql): execute SQL code using specific adapters
* [`hooks.spark()`](https://docs.runprism.com/v0.2.7/fundamentals/tasks/hooks/hooks.spark): execute PySpark code
* [`hooks.dbt_ref()`](https://docs.runprism.com/v0.2.7/fundamentals/tasks/hooks/hooks.dbt_ref): convert materialized dbt models into Pandas DataFrames
* [`hooks.get_connection()`](https://docs.runprism.com/v0.2.7/fundamentals/tasks/hooks/hooks.get_connection): retrieve the connection instance (for SQL adapters)
* [`hooks.get_cursor()`](https://docs.runprism.com/v0.2.7/fundamentals/tasks/hooks/hooks.get_cursor): retrieve a cursor instance (for SQL adapters)

If you want to access these hooks outside of a task, you can use the `load_hooks()` function. Check out the [API documentation](https://docs.runprism.com/v0.2.7/api-reference/prismhooks/load_hooks) for more information.
