MySQL和python交互
一、安装mysql模块
go语言连接mysql简介 go官方仅提供了database package,database package下有两个包sql,sql/driver。这两个包用来定义操作数据库的接口,这就保证了无论使用哪种数据库,他们的操作方式都是相同的。 但go官方并没有提供连接数据库的driver,如果要操作数据库,还需要第三方的driver 包,最常用的有: https://github.com/Go-SQL-Driver/MySQL支持database/sql,全部采用go写。
1.下载安装
A:Windows系统下载
使用github.com/go-sql-driver/mysql这个驱动包,打开cmd窗口输入:go get github.com/go-sql-driver/mysql,会下载到你的GOPATH路径的src 下:

如果没有安装git,需要先安装git。否则安装失败。
下载后在有如下目录。
B:Ubuntu下安装方式:
执行下面两个命令:
下载:go get github.com/Go-SQL-Driver/MySQL 安装:go install github.com/Go-SQL-Driver/MySQL 安装完成以后的文件截图
二、导入包
import ( ”database/sql” _“github.com/Go-SQL-Driver/MySQL” )
- database/sql,是golang的标准库之一,它提供了一系列接口方法,用于访问关系数据库。它并不会提供数据库特有的方法,那些特有的方法交给数据库驱动去实现。
- 我们正在加载的驱动是匿名的,将其限定符别名为_,因此我们的代码中没有一个到处的名称可见。
下面例子中的表结构:
CREATE TABLE userinfo (
uid int(10) NOT NULL AUTO_INCREMENT,
username varchar(64) DEFAULT NULL,
departname varchar(64) DEFAULT NULL,
created date DEFAULT NULL,
PRIMARY KEY (uid)
) ;
三、连接
Open函数:
db, err := sql.Open("mysql", "用户名:密码@tcp(IP:端口)/数据库?charset=utf8")
例如:db, err := sql.Open(“mysql”, “root:111111@tcp(127.0.0.1:3306)/test?charset=utf8”)
四、增删改
有两种方法: 1.直接使用Exec函数添加
func (db *DB) Exec(query string, args ...interface{}) (Result, error)
示例代码:
result, err := db.Exec("INSERT INTO userinfo (username, departname, created) VALUES (?, ?, ?)","lily","销售","2016-06-21")
2.首先使用Prepare获得stmt,然后调用Exec添加
func (db *DB) Prepare(query string) (*Stmt, error)
示例代码:
stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")
result, err := stmt.Exec("zhja", "研发", "2016-06-17")
获取影响数据库的行数,可以根据该数值判断是否插入或删除或修改成功。
count, err := result.RowsAffected()
获得刚刚添加数据的自增ID
id, err := result.LastInsertId()
五、查询
查询 查询单条数据,QueryRow 函数
func (db *DB) QueryRow(query string, args ...interface{}) *Row
示例代码:
var username, departname, created string
err := db.QueryRow("SELECT username,departname,created FROM userinfo WHERE uid=?", 3).Scan(&username, &departname, &created)
代码截图:
扫描并复制当前行中每一列的值,但是要求行必须与行中的列数相同。
func (rs *Rows) Scan(dest ...interface{}) error
查询多条数据,并遍历 Query 获取数据,for xxx.Next() 遍历数据
func (db *DB) Query(query string, args ...interface{}) (*Rows, error)
func (rs *Rows) Next() bool