rust sea-orm的一些使用方法

示例代碼來自https://github.com/easynet-cn/batata涉茧,本人的一個(gè)想兼容nacos(https://github.com/alibaba/nacos)rust項(xiàng)目帜乞。其中數(shù)據(jù)entity是使用sea-orm cli生成幢泼,具體可以參考文檔https://www.sea-ql.org/SeaORM/docs/next/generate-entity/sea-orm-cli/

構(gòu)造數(shù)據(jù)庫鏈接池周霉,鏈接池配置類似HikariCP(https://github.com/brettwooldridge/HikariCP

   let settings = Config::builder()
        .add_source(config::File::with_name("conf/application.yml"))
        .build()
        .unwrap();

    let db_num = settings.get_int("db.num").unwrap();
    let mut conns: Vec<DatabaseConnection> = Vec::new();

    let max_connections = settings
        .get_int("db.pool.config.maximumPoolSize")
        .unwrap_or(100) as u32;
    let min_connections = settings
        .get_int("db.pool.config.minimumPoolSize")
        .unwrap_or(1) as u32;
    let connect_timeout = settings
        .get_int("db.pool.config.connectionTimeout")
        .unwrap_or(30) as u64;
    let acquire_timeout = settings
        .get_int("db.pool.config.initializationFailTimeout")
        .unwrap_or(1) as u64;
    let idle_timeout = settings.get_int("db.pool.config.idleTimeout").unwrap_or(10) as u64;
    let max_lifetime = settings.get_int("db.pool.config.maxLifetime").unwrap_or(30) as u64;

    for i in 0..db_num {
        let url = &settings
            .get_string(format!("db.url.{}", i).as_str())
            .unwrap();

        let mut opt = ConnectOptions::new(url);

        opt.max_connections(max_connections)
            .min_connections(min_connections)
            .connect_timeout(Duration::from_secs(connect_timeout))
            .acquire_timeout(Duration::from_secs(acquire_timeout))
            .idle_timeout(Duration::from_secs(idle_timeout))
            .max_lifetime(Duration::from_secs(max_lifetime))
            .sqlx_logging(true)
            .sqlx_logging_level(log::LevelFilter::Info);

        let db = Database::connect(opt).await.unwrap();

        conns.push(db);
    }

條件查詢崇裁,示例為查詢所有namespace

        let tenant_infos: Vec<tenant_info::Model> = tenant_info::Entity::find()
            .filter(tenant_info::Column::Kp.eq(NamespaceOperationService::DEFAULT_KP))
            .all(db)
            .await
            .unwrap();

in查詢哀澈,示例為根據(jù)namespace ID集合滓窍,查詢配置數(shù)量

#[derive(Debug, FromQueryResult)]
        struct SelectResult {
            tenant_id: Option<String>,
            count: i32,
        }

        let mut config_infos = config_info::Entity::find()
            .select_only()
            .column(config_info::Column::TenantId)
            .column_as(config_info::Column::Id.count(), "count")
            .filter(config_info::Column::TenantId.is_in(tenant_ids))
            .filter(config_info::Column::TenantId.is_not_null())
            .group_by(config_info::Column::TenantId)
            .into_model::<SelectResult>()
            .all(db)
            .await
            .unwrap()
            .iter()
            .map(|x| (x.tenant_id.clone().unwrap_or_default(), x.count))
            .collect::<HashMap<String, i32>>();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市了赌,隨后出現(xiàn)的幾起案子墨榄,更是在濱河造成了極大的恐慌,老刑警劉巖揍拆,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渠概,死亡現(xiàn)場離奇詭異,居然都是意外死亡嫂拴,警方通過查閱死者的電腦和手機(jī)播揪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筒狠,“玉大人猪狈,你說我怎么就攤上這事”缒眨” “怎么了雇庙?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長灶伊。 經(jīng)常有香客問我疆前,道長,這世上最難降的妖魔是什么聘萨? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任竹椒,我火速辦了婚禮,結(jié)果婚禮上米辐,老公的妹妹穿的比我還像新娘胸完。我一直安慰自己,他們只是感情好翘贮,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布赊窥。 她就那樣靜靜地躺著,像睡著了一般狸页。 火紅的嫁衣襯著肌膚如雪锨能。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天芍耘,我揣著相機(jī)與錄音腹侣,去河邊找鬼。 笑死齿穗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饺律。 我是一名探鬼主播窃页,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼跺株,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了脖卖?” 一聲冷哼從身側(cè)響起乒省,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畦木,沒想到半個(gè)月后袖扛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡十籍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年蛆封,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勾栗。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惨篱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出围俘,到底是詐尸還是另有隱情砸讳,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布界牡,位于F島的核電站簿寂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宿亡。R本人自食惡果不足惜常遂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望她混。 院中可真熱鬧烈钞,春花似錦、人聲如沸坤按。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽臭脓。三九已至酗钞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間来累,已是汗流浹背砚作。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘹锁,地道東北人葫录。 一個(gè)月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像领猾,于是被迫代替她去往敵國和親米同。 傳聞我的和親對象是個(gè)殘疾皇子骇扇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容