DEV Community

Cover image for Go database/sql driver for AWS DynamoDB
Thanh Ba Nguyen
Thanh Ba Nguyen

Posted on

Go database/sql driver for AWS DynamoDB

This article was originally posted on my personal notes.

Amazon DynamoDB is a fully managed NoSQL database service provided by Amazon as part of the Amazon Web Services (AWS) portfolio.

  • AWS offers the SDK for Go, which facilitates seamless integration between Go applications and various AWS services, including DynamoDB.
  • AWS provides users with the flexibility to utilize PartiQL, a SQL-like query language, for efficient manipulation of DynamoDB items via operations such as INSERT, SELECT, UPDATE, and DELETE.
  • The Go programming language includes the database/sql package, which offers a versatile and standardized interface for interacting with SQL databases or databases that support SQL-like functionality.

To establish a seamless integration between the three components mentioned earlier, an essential component is required: a database driver that enables Go applications to interface with DynamoDB using the standard database/sql package. This article introduces godynamo - a database/sql driver for AWS DynamoDB.

Disclaimer: I am the author of godynamo.

Usage

Utilizing godynamo to interact with AWS DynamoDB follows a familiar pattern akin to employing any database/sql driver for a database system, for example MySQL. The process involves a sequence of steps: first, importing the godynamo driver into the project; next, initializing a sql.DB instance through using the sql.Open(...) function; and lastly, leveraging SQL statements to operate on the items within the DynamoDB table via the sql.DB instance.

Example:

package main

import (
    "database/sql"
    "fmt"

    _ "github.com/btnguyen2k/gocosmos" // import driver
)

func main() {
    // build connection string
    driver := "godynamo"
    dsn := "Region=us-east-1;AkId=aws-access-key-id;SecretKey=aws-secret-key"
    // create the sql.DB instance
    db, err := sql.Open(driver, dsn)
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // use SQL statement via the sql.DB instance
    dbrows, err := db.Query(`LIST TABLES`)
    if err != nil {
        panic(err)
    }
    for dbRows.Next() {
        var val interface{}
        err := dbRows.Scan(&val)
        if err != nil {
            panic(err)
        }
        fmt.Println(val)
    }
}
Enter fullscreen mode Exit fullscreen mode

Supported SQL statements

godynamo supports 3 groups of SQL statements: table, index and document.

Table-related statement:

๐Ÿ‘‰ CREATE TABLE: create a new DynamoDB table.

๐Ÿ‘‰ LIST TABLES: list all available tables.

๐Ÿ‘‰ DESCRIBE TABLE: return info of a table.

๐Ÿ‘‰ ALTER TABLE: change a table's RCU/WCU or table-class.

๐Ÿ‘‰ DROP TABLE: remove an existing table.

Index-related statements:

๐Ÿ‘‰ DESCRIBE LSI: return info of a Local Secondary Index.

๐Ÿ‘‰ CREATE GSI: create a new Global Secondary Index on a table.

๐Ÿ‘‰ DESCRIBE GSI: return info of a Global Secondary Index.

๐Ÿ‘‰ ALTER GSI: change RCU/WCU settings of a Global Secondary Index.

๐Ÿ‘‰ DROP GSI: remove an existing Global Secondary Index.

Document-related statements:

๐Ÿ‘‰ INSERT: add an item to a table.

๐Ÿ‘‰ SELECT: retrieve data from a table.

๐Ÿ‘‰ UPDATE: modify the value of one or more attributes within an item in a table.

๐Ÿ‘‰ DELETE: delete an existing item from a table.

Find more details on godynamo repository: https://github.com/btnguyen2k/godynamo.

Top comments (0)