go init函数_Go使用MySQL数据库

简介

Go官方并不提供数据库驱动,而只是为开发数据库驱动定义了一些标准接口。我们操作MySQL数据库得需要使用第三方维护的MySQL驱动,推荐使用github.com/go-sql-driver/mysql,主要理由如下: 维护的比较好 完全支持database/sql接口 * 支持keepalive,保持长连接

有了驱动,其实Go使用MySQL和其他语言差不多,只是具体的方法调用和API组织结构不太一样。

准备工作

use golang;

CREATE TABLE `user` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `username` varchar(100) NOT NULL DEFAULT '' COMMENT '用户名',
    `email` varchar(50) NOT NULL DEFAULT '' COMMENT '用户邮箱',
    `ctime` int(11) NOT NULL COMMENT '创建时间',
    `utime` int(11) NOT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

先通过ssh登录服务器(因为安全考虑,不开放MySQL的root用户的远程登录权限),用root用户本地登录mysql新建一个用于测试的可远程登录的用户:

mysql> GRANT ALL PRIVILEGES ON golang.* to 'golang'@'%' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON golang.* to 'golang'@'localhost' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES;

接下来就可以通过golang用户登录新建的数据库进行操作了。

操作MySQL

先get数据库驱动,命令行运行go get github.com/go-sql-driver/mysql会自动将驱动下载到$GOPATH/src中。

package main

import (
    "database/sql"
    "fmt"
    "time"

    _ "github.com/go-sql-driver/mysql"
)

func checkError(e error) {
    if e != nil {
        panic(e)
    }
}

func main() {
    // 打开MySQL连接
    db, err := sql.Open("mysql", "golang:123456@tcp(127.0.0.1:3306)/golang?charset=utf8")
    checkError(err)
    fmt.Println("connected")
    // ?为占位符,防止SQL注入
    stmt, err := db.Prepare("insert into user(username, gender, email, ctime, utime) values(?, ?, ?, ?, ?)")
    checkError(err)
    timestamp := time.Now().Unix()
    // 向占位符传参,Exec是一个不定参数函数,传入的参数与Prepare阶段设置的占位符相等
    res, err := stmt.Exec("zhangsan", 1, "zhangsan@qq.com", timestamp, timestamp)
    checkError(err)
    // 获取生成的数据id
    id, err := res.LastInsertId()
    checkError(err)
    fmt.Println(id)

    stmt, err = db.Prepare("update user set email=? where id=?")
    checkError(err)
    res, err = stmt.Exec("zhangsan@163.com", id)
    checkError(err)
    aff, err := res.RowsAffected()
    checkError(err)
    fmt.Println("affected", aff)

    rows, err := db.Query("select id, username, email from user")
    for rows.Next() {
        var id int
        var username string
        var email string
        err = rows.Scan(&id, &username, &email)
        checkError(err)
        fmt.Println(id, username, email)
    }

    stmt, _ = db.Prepare("delete from user where id>?")
    res, _ = stmt.Exec(1)
    aff, _ = res.RowsAffected()
    fmt.Println("affected", aff)
}

整个数据库操作的流程大概如下: sql.Open()函数用来打开一个注册过的数据库驱动; db.Prepare()函数用来返回准备要执行的sql操作,然后返回准备完毕的执行状态; stmt.Exec()函数用来执行stmt准备好的SQL语句; db.Query()函数用来直接执行Sql返回Rows结果。

数据库驱动的注册在数据库驱动包导入时执行,注册的逻辑写在包的init函数中。导入驱动包只需要import _ "driver/package",只需要执行其init(),而不需要调用包中导出的方法,调用的是Go语言规定的sql接口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Django 架构中,一般使用 Django 自带的 ORM(Object-Relational Mapping)来操作数据库。ORM 是一种将关系数据库中的数据映射到对象的技术,将程序中的对象转换为数据库中的记录,从而实现对数据库的操作。 不过,如果你想直接使用 MySQL Connector/Python 驱动来连接 MySQL 数据库,可以在 Django 项目中的 `__init__.py` 文件中进行相关配置。具体配置如下: 1. 安装 MySQL Connector/Python 驱动,可以使用 pip 命令进行安装: ``` pip install mysql-connector-python ``` 2. 在 Django 项目的 `__init__.py` 文件中添加以下代码: ```python import mysql.connector from django.db.backends.mysql.base import DatabaseWrapper # 定义 MySQL Connector/Python 驱动数据库连接参数 cnx = mysql.connector.connect(user='your_username', password='your_password', host='your_host', database='your_database') # 重写 Django 的 MySQL 数据库连接方法 class MySQLDatabaseWrapper(DatabaseWrapper): def get_new_connection(self, conn_params): return cnx # 注册 MySQLDatabaseWrapper DatabaseWrapper.register_backend('mysql.connector', 'django.db.backends.mysql.base', 'MySQLDatabaseWrapper') ``` 需要将上述代码中的 `your_username`、`your_password`、`your_host` 和 `your_database` 替换为实际的数据库连接参数。 3. 在 Django 项目的 `settings.py` 文件中,将 `DATABASES` 配置中的 `ENGINE` 改为 `django.db.backends.mysql.connector`,如下所示: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql.connector', 'NAME': 'your_database', 'USER': 'your_username', 'PASSWORD': 'your_password', 'HOST': 'your_host', 'PORT': 'your_port', } } ``` 需要将上述代码中的 `your_username`、`your_password`、`your_host`、`your_database` 和 `your_port` 替换为实际的数据库连接参数。 这样,就可以在 Django 项目中使用 MySQL Connector/Python 驱动来连接 MySQL 数据库了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值