Utilisez la clause LIKE avec golang x SQLite3

introduction

J'ai appris les bases du langage Go pendant une semaine ou deux et créé une application Web simple avec la fonction CRUD. Je n'ai pas trouvé d'article qui mènerait à une solution même si je trébuchais (clause LIKE) en exploitant la base de données dans le processus. J'ai décidé d'écrire cet article.

https://qiita.com/init/items/2edfc7acf11234e5b1aa Les opérations de base de la base de données sont décrites dans l'article ci-dessus. Puisque c'est la première fois que j'écris un article sur Qiita, je n'écrirai que sur la clause LIKE sur laquelle je suis tombé par hasard.

environnement

Version: aller 1.15.3

db:SQLite3

PC:Mac

Préparation préalable

Installation de golang, SQLite3, go-sqlite3

Création et contenu de la table

Tout d'abord, créez une table

package main

import (
	"database/sql"
	_ "github.com/mattn/go-sqlite3"
	"log"
)

var DbConnection *sql.DB

type Uset struct {
	Id   int
	Name string
	Age  int
}

func main() {
	DbConnection, err := sql.Open("sqlite3", "../example.sql")
	if err != nil {
		log.Fatalln(err)
	}
	defer DbConnection.Close()
	
	cmd := `CREATE TABLE IF NOT EXISTS user(id INTEGER PRIMARY KEY,
	name STRING,
	age INT)`
	_, err = DbConnection.Exec(cmd)
	if err != nil {
		log.Fatalln(err)
	}
}

résultat
$ sqlite3 example.sql
SQLite version 3.28.0 2019-04-15 14:49:49
Enter ".help" for usage hints.
sqlite> .table
user
sqlite> 
Contenu des données
sqlite> select * from user;
1|yamada|20
2|yamamoto|22
3|suzuki|19
4|tanaka|15
5|miyamoto|30
sqlite> 

J'ai mis 5 disques. À partir de la gauche, identifiant le nom âge

Clause LIKE

Code qui a fonctionné

cmd := "SELECT * FROM user WHERE name LIKE ?"
rows, err := Dbconnection.Query(cmd, "%yamada%")
if err != nil {
	log.Println(err)
}
defer rows.Close()
var users []User
for rows.Next() {
	var user User
	err = rows.Scan(&user.Id, &m.Name, &m.Age)
	if err != nil {
		log.Println(err)
	}
users = append(users, user)

fmt.Println(users)
résultat
$ go run main.go
[{1 yamada 20}]

#### Code qui n'a pas fonctionné ``` cmd := "SELECT * FROM user WHERE name LIKE '%?%'" //← ici rows, err := DbConnection.Query(cmd, "yamada")

//résultat go run main.go []

 Je passe une valeur au "?"
 Au lieu de l'inclure d'abord dans "%%", j'ai dû passer la valeur avec "%" comme ""% yamada% "".
 J'ai trouvé un article sur la clause LIKE de Python x SQLite et je l'ai utilisé comme référence.
<br>
 Aux terminaux, etc.

sqlite> select * from user where name like '%yamada%'; 1|yamada|20


 Je peux y aller.
#### Les nombres entiers peuvent faire de même

cmd := "SELECT * FROM user WHERE age LIKE ?" rows, err := DbConnection.Query(cmd, "%1%")

//résultat [{3 suzuki 19} {4 tanaka 15}]

## Autres modes d'utilisation

#### Lors de la récupération d'enregistrements commençant par n'importe quelle chaîne

cmd := "SELECT * FROM user WHERE name LIKE ?" rows, err := DbConnection.Query(cmd, "y%")

//résultat [{1 yamada 20} {2 yamamoto 22}]


#### Obtenez des données où "m" vient deux fois

cmd := "SELECT * FROM user WHERE name LIKE ?" rows, err := DbConnection.Query(cmd, "%m%m%")

//résultat [{2 yamamoto 22} {5 miyamoto 30}]


#### Obtenez des données avec des colonnes de longueur arbitraire (6 caractères dans l'exemple)

cmd := "SELECT * FROM user WHERE name LIKE ?" rows, err := DbConnection.Query(cmd, "______")

//résultat [{1 yamada 20} {3 suzuki 19} {4 tanaka 15}]


## finalement
 Je ne sais pas si quelqu'un va trébucher de la même manière, mais j'espère que cela aidera quelqu'un. (Je voulais écrire les détails du code, mais je suis désolé que cela ait pris du temps car je suis nouveau.)
 Lorsque j'ai créé une application simple, j'ai réalisé que le golang n'était pas aussi informatif que Rails.
 A l'avenir, j'aimerais écrire un article sur ce que j'ai remarqué en apprenant le golang.
 Merci d'avoir regardé jusqu'à la fin.








Recommended Posts

Utilisez la clause LIKE avec golang x SQLite3
Comment utiliser la clause exist dans l'ensemble de requêtes Django
Comment utiliser SQLite en Python
Utilisez les fonctionnalités de type évoluées dans Sphinx-2.4
Résoudre l'erreur d'adresse déjà utilisée
Utilisez la commande que vous avez précédemment entrée dans IDLE
Comment utiliser la bibliothèque C en Python
Utilisez le dernier pip dans un environnement virtualenv
Obtenez le titre de la fenêtre du système X Window en Python
[Algorithm x Python] Comment utiliser la liste
Utilisez l'application LibreOffice en Python (3) Ajouter une bibliothèque
Connectez-vous avec json en utilisant pygogo.
Avec SQLite3, ajoutez seulement deux lignes et utilisez la bibliothèque d'extension (fonction SQL étendue)!
Sqlite en Python
Téléchargez des fichiers tout en affichant la progression dans Python 3.x
Linux est quelque chose comme ça en premier lieu
Utilisez Cursur qui se ferme automatiquement avec sqlite3 en Python
Utilisez CASA Toolkit dans votre propre environnement Python
[Golang] Spécifiez un tableau pour la valeur de la carte
Utilisons les données ouvertes de "Mamebus" en Python
Comment utiliser le modèle appris dans Lobe en Python
Je veux utiliser le jeu de données R avec python
Je ne peux pas utiliser la commande darknet dans Google Colaboratory!