動態

詳情 返回 返回

AI 友好的雲開發 MySQL SDK 它來了!微信小程序能直連關係型數據庫了 - 動態 詳情

寫在最前

騰訊雲開發最近上新了個能力,能讓微信小程序(當然不止小程序啦~)直接訪問 MySQL 雲數據庫,這給咱們開發者又多了一種直接操作數據庫的方式。具體是咋肥事呢?且聽下文慢慢道來~

前奏鋪墊

丹尼爾:蛋兄,聽説騰訊雲開發近期剛推出一個新功能,現在微信小程序可以直接訪問 MySQL 數據庫了?

蛋先生:喲,消息挺靈通的嘛!其實以前也是可以訪問 MySQL 數據庫的,只是需要通過數據模型來間接操作

丹尼爾:數據模型?

蛋先生:可以理解為數據庫之上的一層 ORM 層

丹尼爾:那既然都可以訪問,有啥不同?

蛋先生:越上層,使用起來會更簡單一些,但限制也會多一些,畢竟是在數據庫之上的一層黑盒封裝。而越接近底層,則會越靈活,開發者能發揮的空間也就越大

丹尼爾:哦,越接近底層,是不是越難了

蛋先生:倒不會啦,畢竟只是一些數據庫使用的淺層知識,這點小菜對開發者們來説不在話下~

JS SDK - 前端開發者的福音

丹尼爾:那具體怎麼用呢?

蛋先生:如果你對前端技術棧比較熟悉,那 js sdk 就是你的最佳選擇了!無論是在 web 應用、服務端 nodejs 應用還是微信小程序裏,都提供了相應的 js sdk 來直接訪問 mysql 數據庫

丹尼爾:舉個栗子?

蛋先生:那我就舉兩個比較有代表性的例子吧:一個是簡單的單表查詢,另一個是稍複雜的多對多查詢。至於其他場景,你可以自己去翻翻官方的文檔,寫得還是挺全面的

丹尼爾:好咧!

 ✎ 初始化

蛋先生:一切的開始,還是得從初始化説起。通過下面這段代碼,我們就能在微信小程序中創建一個 MySQL 數據庫連接實例。當然,對於 Web 應用或服務端的 Node.js 應用,也可以用類似的方式進行初始化

const { init } = require("@cloudbase/wx-cloud-client-sdk");

...

wx.cloud.init({
  env: "{{這裏填上你的雲開發環境 ID 哦}}",
});

const db = init(wx.cloud).mysql();

丹尼爾:OK,代碼灰常的簡單

蛋先生:接下來,我就用下面這三個簡單的表來進行演示

 ✎ 簡單的單表查詢

蛋先生:先來演示一下最基礎的單表查詢

// 從 `articles` 表中查詢所有 `title` 包含 "雲開發" 的記錄
const { data, error } = await db
  .from("articles")
  .select("*")
  .like("title", "%雲開發%")
  
// 返回 data 的示例值
[
  {
    id: 1,
    title: "雲開發MySQL新功能詳解",
  }
];

丹尼爾:單表查詢確實挺簡單的,一看就明白

 ✎ 複雜的多對多

蛋先生:那我們再來看一下多對多查詢,其實也同樣很直觀

// 從 `articles` 表中查詢所有記錄,並只返回每條記錄的 id、title 字段,以及關聯的 tags 中的 name 字段
const { data, error } = await db
  .from("articles")
  .select("id, title, tags(name)")
  
// 返回 data 的示例值
[
  {
    id: 1,
    tags: [
      {
        name: "雲開發",
      },
      {
        name: "MySQL",
      },
    ],
    title: "雲開發MySQL新功能詳解",
  },
  {
    id: 2,
    tags: [
      {
        name: "微信小程序",
      },
    ],
    title: "微信小程序性能優化指南",
  }
]

丹尼爾:哇塞,太酷了!我之前用過 Supabase 的 supabase-js SDK,感覺兩者很像啊!

蛋先生:你眼光真準!雲開發的 MySQL JS SDK 在設計上確實和 supabase-js SDK 幾乎一模一樣

丹尼爾:為什麼要這麼設計呢?

蛋先生:我覺得啊,時代不同了。以前完全可以隨意設計自己的 SDK,但現在是 AI 時代,要讓 AI 熟悉一種新的 SDK 使用方式,是需要時間成本的。保持與 supabase-js SDK 一致,可以提高 AI 的適應性,畢竟現在的開發者幾乎都離不開 AI 編程助手。

HTTP API - 非 JS 編程語言開發者的利器

丹尼爾:嗯,確實挺好用的。不過這樣就只限於 JS 了。如果我想用 Go 來訪問 MySQL 雲數據庫,該怎麼辦呢?

蛋先生:雖然目前還沒有提供 Go SDK,但云開發貼心地提供了 HTTP API,所以你可以用任何編程語言寫一個 HTTP 客户端來訪問 MySQL 數據庫

丹尼爾:這個 HTTP API 是什麼樣子的?

蛋先生:同樣為了提高 AI 的適應性,HTTP API 在設計上選擇遵循 PostgREST 標準協議

丹尼爾:哦,那也來用兩個例子演示一下吧

蛋先生:好,那就滿足一下你的好奇心吧

 ✎ 簡單的單表查詢

蛋先生:一樣的,先來演示一個簡單的單表查詢

# 從 `articles` 表中查詢所有 `title` 包含 "雲開發" 的記錄

curl -i -X GET 'http://{{host}}/v1/rdb/rest/v1/articles?select=*&title=like.%雲開發%' \
-H 'Authorization: Bearer <This is a fake token, please use yours>' \
-H 'Prefer: return=representation'

丹尼爾:不錯,依然簡單明瞭

 ✎ 複雜的多對多

蛋先生:最後,我們也來演示一個多對多的查詢

# 從 `articles` 表中查詢所有記錄,並只返回每條記錄的 id、title 字段,以及關聯的 tags 中的 name 字段

curl -i -X 'GET http://{{host}}/v1/rdb/rest/articles?select=id,title,tags(name)' \
-H 'Authorization: Bearer <This is a fake token, please use yours>'

丹尼爾:Cool~

控制枱 - 數據庫管理新體驗

蛋先生:這次還配套上線了在線 MySQL 數據庫管理端。功能雖然算不上花哨,但我覺得關聯表功能比以前的數據模型要好一些

丹尼爾:怎麼説?

蛋先生:舉個例子,user_article 模型裏有個字段 user_id 要關聯 user 模型,在配置關聯時,需要聲明在 user 模型中的字段,一開始我還真不適應

丹尼爾:確實,居然可以在 user_article 模型的地盤直接給 user 模型加字段,都不知道 user 模型同意不?

蛋先生:呵呵!還有一個問題,如果 user 模型被多個模型關聯,那簡直就是災難。因為在 user 模型裏會出現多個代表其他模型的字段,如果這裏有 10 個,你可以想象字段在 user 模型中氾濫成災的景象

丹尼爾:嗯,確實如此。那新的 MySQL 數據庫管理端是什麼樣的?

蛋先生:跟你預期的一樣,user_article 表的 user_id 關聯 user 表的 _id,一切都是那麼自然

丹尼爾:哦,那 user 表的字段也不會被污染了

蛋先生:是的,看起來是不是很清爽

丹尼爾:那 user_article 能查看具體關聯的 user 信息嗎?這應該是 user_article 表關心的內容

蛋先生:當然可以

不足與期待

丹尼爾:看起來很不錯啊。哦,對了,我記得以前數據模型提供的 SDK 是沒有事務支持的

蛋先生:是的,這確實是個小硬傷。遺憾的是,這次 MySQL JS SDK 依舊沒帶上。不過嘛,事務本來就主要用在服務端,對小程序等前端調用影響不大。聽説後面是有計劃推出的,然後還有實時推送等這些剛需功能,還是可以小期待一下的~So,在這一塊上,和數據模型算是五五開吧 😅

丹尼爾:嗯,那我先去了解了解,同時期待這些實用的功能儘快上線

寫在最後

“親們,都到這了,要不,點贊或收藏或關注支持下我唄 o( ̄▽ ̄)d”

Add a new 評論

Some HTML is okay.