# Golem Add Mysql Rust

> Using golem:rdbms/mysql from a Rust Golem agent. Use when the user asks to connect to MySQL, run SQL, execute a MySQL transaction, or use MySQL from Rust agent code.

- Skill: `golemcloud/golem-add-mysql-rust` (Agent Skill)
- Install (CLI): `npx skillmds@latest add golemcloud/golem-add-mysql-rust`
- Raw SKILL.md: https://api.skillmd.com/api/skills/golemcloud/golem-add-mysql-rust/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: golemcloud (https://skillmd.com/u/golemcloud)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/golemcloud/golem-add-mysql-rust

---


# Using MySQL from a Rust Agent

`golem-rust` already exposes the host bindings for `golem:rdbms/mysql@1.5.0`, so you do not need an extra crate.

## Imports

```rust
use golem_rust::bindings::golem::rdbms::mysql::{
    DbConnection,
    DbValue,
};
```

## Open a Connection

```rust
let conn = DbConnection::open("mysql://user:password@localhost:3306/app")
    .map_err(|err| format!("{err:?}"))?;
```

If the user asks for a method that returns a plain `String`, keep the public method signature as
`String` and handle host errors inside the method with `expect(...)` or `panic!(...)` rather than
changing the signature to `Result<String, _>`.

## Query Data

MySQL placeholders use `?`.

```rust
let result = conn
    .query(
        "SELECT ?",
        vec![DbValue::Varchar("hello".to_string())],
    )
    .map_err(|err| format!("{err:?}"))?;

let row = result.rows.first().ok_or("query returned no rows")?;
let value = row.values.first().ok_or("query returned no columns")?;

let message = match value {
    DbValue::Varchar(value)
    | DbValue::Text(value)
    | DbValue::Tinytext(value)
    | DbValue::Mediumtext(value)
    | DbValue::Longtext(value)
    | DbValue::Fixchar(value) => value.clone(),
    other => return Err(format!("unexpected MySQL value: {other:?}")),
};
```

## Execute Statements

```rust
let affected = conn
    .execute(
        "INSERT INTO notes (id, body) VALUES (?, ?)",
        vec![DbValue::Int(1), DbValue::Varchar("hello".to_string())],
    )
    .map_err(|err| format!("{err:?}"))?;
```

## Transactions

```rust
let tx = conn.begin_transaction().map_err(|err| format!("{err:?}"))?;

tx.execute(
    "UPDATE notes SET body = ? WHERE id = ?",
    vec![DbValue::Varchar("updated".to_string()), DbValue::Int(1)],
)
.map_err(|err| format!("{err:?}"))?;

tx.commit().map_err(|err| format!("{err:?}"))?;
```

