HeidiSQLでSQLを実行する
次に、Go LangでWebAPIを作成するために、まずはDockerでMySQLを構築するで作ったMySQL
にデータベースを作成する。HeidiSQL
から作成しようとするが、
SQL 0A80E90FC (1044): Access denied for user 'your_username'@'%' to database 'project'uery
という権限エラーが出るようになった。
version: '3'
services:
mysql:
image: mysql:latest
container_name: project
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: project
MYSQL_USER: username
MYSQL_PASSWORD: password
ports:
, "3306:3306"
volumes:
- ./data:/var/lib/mysql
に変更したらできた。ちょっと理由はわからない。
で、projectというデータベースでSQL
を実行する。
CREATE TABLE sample (
id INT AUTO_INCREMENT PRIMARY KEY,
firstName VARCHAR(255),
lastName VARCHAR(255),
isActive BOOLEAN DEFAULT TRUE
);
これでSampleのテーブルを作成することが出来た。
GoLangでテーブルを作成する
次にGORM
をインストールする。
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
を実行すると、
require (
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/mattn/go-sqlite3 v1.14.18 // indirect
gorm.io/driver/sqlite v1.5.4 // indirect
gorm.io/gorm v1.25.5 // indirect
)
更新された。
上のふたつは謎だけど、それっぽいのは入ってきた。
よく考えたらMySQL
を使用するので、
go get -u gorm.io/driver/mysql
だった。
ちなみに不要パッケージの削除方法はわからなかった。(要調査)
main.go
に下記をコピペ。
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
// gorm.Modelをつけると、idとCreatedAtとUpdatedAtとDeletedAtが作られる
gorm.Model
Name string
Age int
IsActive bool
}
func main() {
// dbを作成します
db := dbInit()
// dbをmigrateします
db.AutoMigrate(&User{})
}
func dbInit() *gorm.DB {
dsn := "root:password@tcp(127.0.0.1:3306)/project?charset=utf8mb4&parseTime=true"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
return db
}
これで実行すると
$ go run src/main.go
2023/11/28 17:51:13 C:/01_myPROJECT/project-Backend/src/main.go:22 SLOW SQL >= 200ms
[282.042ms] [rows:0] CREATE TABLE `users` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime( (3) NULL,`name` longtext,`age` bigint,`is_active` boolean,PRIMARY KEY (`id`),INDEX `idx_users_deleted_at` (`deleted_at`))
作成したDB
にusers
テーブルが作成された。
これで接続が確認できた。