< 返回版块

ugdbg 发表于 2022-11-05 01:45

Tags:sqlx,数据库,异步

sqlx默认不指定数据库,怎样解决下面的问题,异步感觉还是有点懵,或者sqlx有没有切换数据库的方法(暂时没找到)

use sqlx::{mysql::MySqlPoolOptions, Executor};

#[tokio::main]
async fn main() -> Result<(), sqlx::Error> {
    let pool = MySqlPoolOptions::new()
        .connect("mysql://root:123456@localhost")
        // 没有指定数据库
        .await?;

    pool.execute("use test").await?;
	
    // tokio::time::sleep(std::time::Duration::from_secs(1)).await;
    // 这里加上这一句,运行正常
	
    let row = sqlx::query("select * from a").fetch_all(&pool).await?;
    // ⬆这里报错

    println!("{:?}", row);

    Ok(())
}

报错:

Error: Database(MySqlDatabaseError { code: Some("3D000"), number: 1046, message: "No database selected" })

评论区

写评论
作者 ugdbg 2022-11-09 16:52

找到问题了,原因是use语句和select语句使用了不同的connection,导致"No database selected"的报错,MySqlPoolOptions强制设置max_connections(1)可以粗暴解决问题

作者 ugdbg 2022-11-05 15:46

嗯嗯,有时候就是理解不对

--
👇
gorust21: 好好看文档 localhost/数据库 ,或者理解下数据库url

gorust21 2022-11-05 08:13

好好看文档 localhost/数据库 ,或者理解下数据库url

1 共 3 条评论, 1 页