sqlx使用教程

1 篇文章 0 订阅

sqlx简介

sqlx是 Go 的软件包,它在出色的内置database/sql软件包的基础上提供了一组扩展。该库兼容sql原生包,同时又提供了更为强大的、优雅的查询、插入函数。

新建表

DROP TABLE IF EXISTS `people`;
CREATE TABLE `people`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

连接数据库

  1. 下载依赖包

    go get "github.com/go-sql-driver/mysql"
    go get "github.com/jmoiron/sqlx"
    
  2. 连接数据库

    import (
    	"fmt"
    	"log"
    
    	_ "github.com/go-sql-driver/mysql" //必须引入  否则报错:error sql: unknown driver "mysql" (forgotten import?)
    	"github.com/jmoiron/sqlx"
    )
    
    var db *sqlx.DB
    
    func init() {
    	// 根据自己的数据库配置替代字符串中对应字串
    	var err error
    	db, err = sqlx.Connect("mysql", "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True")
    	if err != nil {
    		log.Fatalf("open mysql error %v", err)
    	}
    	fmt.Printf("连接成功:%v", db)
    	db.SetMaxOpenConns(20) //设置最大连接数
    	db.SetMaxIdleConns(10) //设置最大空闲连接数
    }
    

插入数据

  1. 插入数据使用db.Exec方法
	r, err := db.Exec("insert into people(name, age)values(?, ?)", "bxy", 100)
	if err != nil {
		fmt.Println("exec failed, ", err)
		return
	}
	id, err := r.LastInsertId()
	if err != nil {
		fmt.Println("exec err, ", err)
		return
	}
	fmt.Println("insert succ: ", id)

执行结果:
在这里插入图片描述

查询数据

  1. 查询数据使用db.select方法和Get方法,第一个参数是接收结果的对象,第二个参数是sql语句,第三个参数及之后的参数是填充占位符的对象。
  2. Select返回所有满足条件的结果,需要使用对象列表接收。
  3. Get返回满足条件的第一条结果,需要使用对象接收。
type People struct {
	Id   int    `db:"id"`
	Name string `db:"name"`
	Age  int    `db:"age"`
}

func main() {

	var (
		peopleList []People
		people     = People{}
	)

	err := db.Select(&peopleList, "select * from people where name = ?", "bxy")//查询全部记录
	if err != nil {
		fmt.Println("select failed ", err)
		return
	}
	fmt.Printf("select succ %#v\n", peopleList)

	err = db.Get(&people, "select * from people where name = ?", "bxy")   //查询单条记录
	if err != nil {
		fmt.Println("Get failed ", err)
		return
	}
	fmt.Printf("get succ %#v\n", people)
}

执行结果:
在这里插入图片描述

修改数据

func main() {
	res, err := db.Exec("update people set age=? where name=?", 28, "bxy")
	if err != nil {
		fmt.Println("exec failed: ", err)
		return
	}
	row, err := res.RowsAffected() //返回修改成功的条数
	if err != nil {
		fmt.Println("row failed: ", err)
		return
	}
	fmt.Println("update succ: ", row)
}

执行结果:
在这里插入图片描述

删除数据

func main() {
	res, err := db.Exec("delete from people where id=?", 1)
	if err != nil {
		fmt.Println("exec failed: ", err)
		return
	}
	row, err := res.RowsAffected() //返回结果
	if err != nil {
		fmt.Println("row failed: ", err)
		return
	}
	fmt.Println("delete succ: ", row) 
}

执行结果:
在这里插入图片描述

事务

  • db.Begin(): 开启事务
  • tx.rollback(): 回滚事务
  • tx.commit(): 提交事务
func main() {
	conn, err := db.Begin()
	if err != nil {
		fmt.Println("begin failed: ", err)
		return
	}

	r, err := conn.Exec("insert into people(name, age)values(?,?)", "如花", 20)
	if err != nil {
		fmt.Println("exec failed: ", err)
		conn.Rollback()
		return
	}
	id, err := r.LastInsertId()
	if err != nil {
		fmt.Println("lastinsertid err: ", err)
		conn.Rollback()
		return
	}
	fmt.Println("insert succ", id)

	r, err = conn.Exec("insert into people(name, age)values(?,?)", "如花", 20)
	if err != nil {
		fmt.Println("exec failed: ", err)
		conn.Rollback()
		return
	}
	id, err = r.LastInsertId()
	if err != nil {
		fmt.Println("lastinsertid err: ", err)
		conn.Rollback()
		return
	}
	fmt.Println("insert succ", id)
	conn.Commit()

}

执行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
SQLx是一个Rust编程语言的异步数据库操作库,可以用于编写高性能的数据库应用程序。它提供与多种数据库(如PostgreSQLMySQL等)交互的功能,并支持异步操作。 SQLx使用Rust的异步特性来实现高并发、低延迟的数据库访问,同时提供了强大的类型安全性和简单易用的API。 在实际的后端应用中,SQLx可以用于对数据库进行查询和修改操作。它提供了一组简单而灵活的API,使得开发人员可以轻松地编写与数据库交互的代码。 SQLx支持使用SQL语言进行数据库查询和操作,同时也支持使用Rust的类型系统来进行数据验证,提高了代码的可靠性和安全性。 在使用SQLx时,需要先在Cargo.toml文件中添加SQLx的依赖,并指定所使用的数据库类型和连接信息。例如,使用PostgreSQL数据库的依赖配置如下: ```toml [dependencies] sqlx = { version = "0.5.5", features = ["postgres"] } ``` 接下来,可以使用SQLx提供的API来进行数据库操作。例如,下面是一个简单的查询示例: ```rust use sqlx::postgres::PgPool; #[derive(Debug, sqlx::FromRow)] struct User { id: i32, name: String, } #[async_std::main] async fn main() -> Result<(), sqlx::Error> { let pool = PgPool::connect("postgres://user:pass@localhost/mydb").await?; let users = sqlx::query_as::<_, User>("SELECT id, name FROM users") .fetch_all(&pool) .await?; println!("{:?}", users); Ok(()) } ``` 该示例中,首先定义了一个User结构体,并使用`#[derive(sqlx::FromRow)]`宏将其与数据库中的表映射。然后,创建了一个连接池,并使用`sqlx::query_as`方法执行一个查询,将查询结果映射到User结构体中。最后,输出查询结果。 总之,SQLx是一个非常强大的异步数据库操作库,可以帮助开发人员快速、安全地编写高性能的后端应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值