使用sqlx要注意的点

1.使用query、queryRows返回的rows,应该使用rows.next(),扫描完每一行或者调用rows.close(),否则该链接永远不会被释放。
The connection used by the Query remains active until either all rows are exhausted by the iteration via Next, or rows.Close() is called, at which point it is released. For more information, see the section on the connection pool.
2.使用事务时不能使用下面这种方式,因为sqlx维护了一个连接池,开启事务、执行语句、提交回滚不一定在同一个连接上。

// this will not work if connection pool > 1
db.MustExec("BEGIN;")
db.MustExec(...)
db.MustExec("COMMIT;")

应该使用下面的方式

tx := db.MustBegin()
tx.MustExec(...)
err = tx.Commit()

一定要提交或者回滚,不然连接不会释放。
3.不能使用占位符修改sql语句的表结构

// doesn't work
db.Query("SELECT * FROM ?", "mytable")
 
// also doesn't work
db.Query("SELECT ?, ? FROM people", "name", "location")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLx是一个Rust编程语言的异步数据库操作库,可以用于编写高性能的数据库应用程序。它提供与多种数据库(如PostgreSQL、MySQL等)交互的功能,并支持异步操作。 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是一个非常强大的异步数据库操作库,可以帮助开发人员快速、安全地编写高性能的后端应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值