---
title: Query SQL databases
description: Use sql.from() to query SQL databases with Flux.
url: https://docs.influxdata.com/flux/v0/query-data/sql/
estimated_tokens: 2201
product: Flux
version: v0
---

# Query SQL databases

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

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

## Databases

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

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

## Drivers

`sql.from()` 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:

-   `awsathena`
-   `bigquery`
-   `hdb`
-   `mysql`
-   `postgres`
-   `snowflake`
-   `sqlite3`
-   `sqlserver`
-   `vertica`, `vertigo`

## 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.from(
    driverName: "postgres",
    dataSourceName: "postgresql://${username}:${password}@localhost:5432",
    query: "SELECT * FROM example_table",
)
```

## Results structure

`sql.from()` returns a [stream of tables](/flux/v0/get-started/data-model/#stream-of-tables) with no grouping (all rows in a single table). *For more information about table grouping, see [Flux data model - Restructure tables](/flux/v0/get-started/data-model/#restructure-tables).*

#### Column data types

Each `sql.from()` [driver](#drivers) converts column data types from the source database into [Flux data types](/flux/v0/spec/types/#basic-types). *See the [database guides](#databases) for information about data type conversions.*

Given the following **example\_table** in a MySQL database:

##### example\_table

| ID | Name | Address | Country |
| --- | --- | --- | --- |
| 1 | Alfreds Futterkiste | Obere Str. 57 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Avda. de la Constitución 2222 | Mexico |
| 3 | Antonio Moreno Taquería | Mataderos 2312 | Mexico |
| 4 | Around the Horn | 120 Hanover Sq. | UK |
| 5 | Berglunds snabbköp | Berguvsvägen 8 | Sweden |

##### Flux query

```js
import "sql"

sql.from(
    driverName: "mysql",
    dataSourceName: "username:passwOrd@tcp(localhost:3306)/db",
    query: "SELECT ID, Name FROM example_table",
)
```

##### Output

| ID | Name |
| --- | --- |
| 1 | Alfreds Futterkiste |
| 2 | Ana Trujillo Emparedados y helados |
| 3 | Antonio Moreno Taquería |
| 4 | Around the Horn |
| 5 | Berglunds snabbköp |

#### Related

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