Le pilote Go (aliyun-tablestore-go-sql-driver) implémente l'interface database/sql/driver et vous permet d'accéder aux données Tablestore via le package standard database/sql.
Prérequis
Une paire de clés AccessKey disposant de l'autorisation
ots:SQL*(obligatoire pour les utilisateurs RAM).Une table de données et une table de mappage. Pour plus d'informations, consultez la rubrique Opérations DDL.
Procédure
Étape 1 : Installer le pilote Go
Exécutez la commande suivante pour installer le pilote Go :
go get github.com/aliyun/aliyun-tablestore-go-sql-driver
Étape 2 : Se connecter avec le pilote Go
Paramètres
Pour accéder à Tablestore avec le pilote Go, spécifiez le nom du pilote et un nom de source de données (DSN).
Paramètre | Description |
driverName | Nom du pilote Go Tablestore. Définissez cette valeur sur |
dataSourceName | Le DSN, au format
Pour les autres options de configuration, consultez la section Options de configuration. |
Exemple
import (
"database/sql"
_ "github.com/aliyun/aliyun-tablestore-go-sql-driver"
)
// Set the Go driver name and the Tablestore data source name.
db, err := sql.Open("ots", "https://access_key_id:access_key_secret@endpoint/instance_name")
if err != nil {
panic(err) // Handle the error.
}
Étape 3 : Interroger des données
Exécutez des requêtes avec la méthode Query ou utilisez des instructions préparées avec la méthode Prepare.
Les types de variables doivent correspondre aux types de données Tablestore. Pour le mappage des types, consultez la section Mappage des types de données.
Query
rows, err := db.Query("SELECT pk1, col1, col2 FROM test_table WHERE pk1 = ?", 3)
if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var pk1 int64
var col1 float64
var col2 string
if err := rows.Scan(&pk1, &col1, &col2); err != nil {
panic(err)
}
fmt.Println(pk1, col1, col2)
}
Prepare
stmt, err := db.Prepare("SELECT pk1, col1, col2 FROM test_table WHERE pk1 = ?")
if err != nil {
panic(err)
}
defer stmt.Close()
rows, err := stmt.Query(3)
if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var pk1 int64
var col1 float64
var col2 string
if err := rows.Scan(&pk1, &col1, &col2); err != nil {
panic(err)
}
fmt.Println(pk1, col1, col2)
}
Exemple complet
L'exemple suivant se connecte à une instance Tablestore et interroge toutes les données de la table test_table :
package main
import (
"database/sql"
"fmt"
_ "github.com/aliyun/aliyun-tablestore-go-sql-driver"
)
func main() {
db, err := sql.Open("ots", "https://************************:********************************@myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance")
if err != nil {
panic(err)
}
defer db.Close()
rows, err := db.Query("SELECT * FROM test_table")
if err != nil {
panic(err)
}
defer rows.Close()
columns, _ := rows.Columns()
for rows.Next() {
values := make([]interface{}, len(columns))
pointers := make([]interface{}, len(columns))
for i := range values {
pointers[i] = &values[i]
}
if err := rows.Scan(pointers...); err != nil {
panic(err)
}
fmt.Println(values...)
}
}
Options de configuration
Configurez le pilote Go en ajoutant des paramètres de requête au DSN.
https://ak:sk@endpoint/instance?retryTimes=3&requestTimeout=10s
Les options temporelles utilisent le format de durée Go, par exemple 15s et 500ms.
|
Option |
Valeur par défaut |
Description |
|
|
10 |
Nombre maximal de tentatives. Entier. |
|
|
15s |
Délai d'expiration de la connexion. La valeur |
|
|
30s |
Délai d'expiration de la requête. |
|
|
5s |
Intervalle maximal entre les tentatives. |
|
|
2000 |
Nombre maximal de connexions inactives. Entier. |
Mappage des types de données
Les types de données Tablestore correspondent à des types Go. Toute incompatibilité de type génère une erreur.
|
Type de données Tablestore |
Type de données Go |
|
Integer |
int64 |
|
Binary |
[]byte |
|
String |
string |
|
Double |
float64 |
|
Boolean |
bool |