yamakiy’s tech blog

技術系の記事をメインにやります。

Nim試してみた

pythonに似た文法と噂のNimを触ってみる
MySQLに接続してちょっとごにょごにょ

Nim導入

ほぼ公式通りなので省略 最後にpathを通すことを忘れずに nim-lang.org


MySQL接続の為にdb_mysqlを導入

パッケージ管理ツール nimbleを使って入れていく

[root@localhost nim]# nimble search db_mysql
db:
  url:         https://github.com/jlp765/db (git)
  tags:        wrapper, database, module, sqlite, mysql, postgres, db_sqlite, db_mysql, db_postgres
  description: Unified db access module, providing a single library module to access the db_sqlite, db_mysql and db_postgres modules.
  license:     MIT
  website:     https://github.com/jlp765/db
[root@localhost nim]# nimble install db

簡単なDB操作をしてみる

import db_mysql

let db = open("localhost", "root", "", "test")

# testテーブルの中身を全て消す
db.exec(sql"delete from test")

# testテーブルに10行インサート
for i in 1..10:
    db.exec(sql"insert into test(id, name) values(?, 'test')", i)

# testテーブルの中を出力
for i in db.fastRows(sql"select * from test"):
    echo i

db.close()

シンプルでわかりやすい・・・

比較用に goで同じことやる

package main

import(
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "root:@/test")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    // testテーブルの中身を全て消す
    _, err = db.Exec("delete from test")
    if err != nil {
        panic(err.Error())
    }

    // testテーブルに10行インサート
    for i := 1; i < 11; i++ {
        _, err = db.Exec(fmt.Sprintf("insert into test(id, name) values(%d, 'test')", i))
        if err != nil {
            panic(err.Error())
        }
    }

    // testテーブルの中を出力
    rows, err := db.Query("select * from test")
    for rows.Next() {
        var id int
        var name string

        err := rows.Scan(&id, &name)
        if err != nil {
            panic(err.Error())
        }
        fmt.Println(id, name)
    }
}

括弧が無くてpythonライクにかけるnimの方が好み
簡単な操作しかしてないから、またコロコロ意見代わるかもしれない