---
title: Write to SQL databases
description: Use sql.to() to write data to SQL databases with Flux.
url: https://docs.influxdata.com/flux/v0/write-data/sql/
estimated_tokens: 2253
product: Flux
version: v0
---

# Write to SQL databases

Use [`sql.to()`](/flux/v0/stdlib/sql/to/) to write data to SQL databases with Flux.

-   [Databases](#databases)
-   [Drivers](#drivers)
-   [Data source names](#data-source-names)
    -   [Store sensitive credentials as secrets](#store-sensitive-credentials-as-secrets)
-   [Data structure](#data-structure)
    -   [Column data types](#column-data-types)
-   [Example](#example)

## Databases

`sql.to()` supports the following SQL databases:

-   [Amazon RDS](/flux/v0/write-data/sql/amazon-rds/)
-   [CockroachDB](/flux/v0/write-data/sql/cockroachdb/)
-   [BigQuery](/flux/v0/write-data/sql/bigquery/)
-   [MariaDB](/flux/v0/write-data/sql/mariadb/)
-   [MySQL](/flux/v0/write-data/sql/mysql/)
-   [Percona](/flux/v0/write-data/sql/percona/)
-   [PostgreSQL](/flux/v0/write-data/sql/postgresql/)
-   [SAP HANA](/flux/v0/write-data/sql/sap-hana/)
-   [Snowflake](/flux/v0/write-data/sql/snowflake/)
-   [SQL Server](/flux/v0/write-data/sql/sql-server/)
-   [SQLite](/flux/v0/write-data/sql/sqlite/)
-   [Vertica](/flux/v0/write-data/sql/vertica/)

## Drivers

`sql.to()` uses [Go SQL drivers](https://github.com/golang/go/wiki/SQLDrivers) in the [Go sql package](https://pkg.go.dev/database/sql) to connect to SQL databases. The following drivers are available:

-   `bigquery`
-   `hdb`
-   `mysql`
-   `postgres`
-   `snowflake`
-   `sqlite3`
-   `sqlserver`

## Data source names

Each [SQL driver](#drivers) supports unique data source name (DSN) syntaxes (also known as **connection strings**). *See the [database guides](#databases) for information about DSNs for each driver.*

#### Store sensitive credentials as secrets

If using **InfluxDB Cloud** or **InfluxDB OSS 2.x**, we recommend storing DSN credentials as [InfluxDB secrets](/influxdb/cloud/admin/secrets/). Use [`secrets.get()`](/flux/v0/stdlib/influxdata/influxdb/secrets/get/) to retrieve a secret from the InfluxDB secrets API.

```js
import "sql"
import "influxdata/influxdb/secrets"

username = secrets.get(key: "POSTGRES_USER")
password = secrets.get(key: "POSTGRES_PASS")

sql.to(
    driverName: "postgres",
    dataSourceName: "postgresql://${username}:${password}@localhost:5432",
    table: "example_table",
)
```

## Data Structure

`sql.to()` ungroups all rows into a single table and writes all existing columns as the specified destination table. If the destination table doesn’t exist, `sql.to()` attempts to create it.

#### Column data types

Each `sql.to()` [driver](#drivers) converts [Flux basic data types](/flux/v0/data-types/basic/) to corresponding data types supported by the target database. *See the [database guides](#databases) for information about data type conversions.*

## Example

Given the following following [stream of tables](/flux/v0/get-started/data-model/#stream-of-tables):

##### data

| _time | tag | _value |
| --- | --- | --- |
| 2021-01-01T00:00:00Z | t1 | -2 |
| 2021-01-01T00:00:10Z | t1 | 10 |
| 2021-01-01T00:00:20Z | t1 | 7 |

| _time | tag | _value |
| --- | --- | --- |
| 2021-01-01T00:00:00Z | t2 | 19 |
| 2021-01-01T00:00:10Z | t2 | 4 |
| 2021-01-01T00:00:20Z | t2 | -3 |

##### Flux script

```js
import "sql"

data
    |> sql.to(
        driverName: "mysql",
        dataSourceName: "username:passwOrd@tcp(localhost:3306)/db",
        table: "exampleTable"
    )
```

##### SQL output

| _time | tag | _value |
| --- | --- | --- |
| 2021-01-01 00:00:00 | t1 | -2 |
| 2021-01-01 00:00:10 | t1 | 10 |
| 2021-01-01 00:00:20 | t1 | 7 |
| 2021-01-01 00:00:00 | t2 | 19 |
| 2021-01-01 00:00:10 | t2 | 4 |
| 2021-01-01 00:00:20 | t2 | -3 |

#### Related

-   [sql.to() function](/flux/v0/stdlib/sql/to/)
