AI 友好的云开发 MySQL SDK 它来了!微信小程序能直连关系型数据库了

写在最前

腾讯云开发最近上新了个能力,能让微信小程序(当然不止小程序啦~)直接访问 MySQL 云数据库,这给咱们开发者又多了一种直接操作数据库的方式。具体是咋肥事呢?且听下文慢慢道来~

前奏铺垫

丹尼尔:蛋兄,听说腾讯云开发近期刚推出一个新功能,现在微信小程序可以直接访问 MySQL 数据库了?

蛋先生:哟,消息挺灵通的嘛!其实以前也是可以访问 MySQL 数据库的,只是需要通过数据模型来间接操作

丹尼尔:数据模型?

蛋先生:可以理解为数据库之上的一层 ORM 层

丹尼尔:那既然都可以访问,有啥不同?

蛋先生:越上层,使用起来会更简单一些,但限制也会多一些,毕竟是在数据库之上的一层黑盒封装。而越接近底层,则会越灵活,开发者能发挥的空间也就越大

丹尼尔:哦,越接近底层,是不是越难了

蛋先生:倒不会啦,毕竟只是一些数据库使用的浅层知识,这点小菜对开发者们来说不在话下~

JS SDK - 前端开发者的福音

丹尼尔:那具体怎么用呢?

蛋先生:如果你对前端技术栈比较熟悉,那 js sdk 就是你的最佳选择了!无论是在 web 应用、服务端 nodejs 应用还是微信小程序里,都提供了相应的 js sdk 来直接访问 mysql 数据库

丹尼尔:举个栗子?

蛋先生:那我就举两个比较有代表性的例子吧:一个是简单的单表查询,另一个是稍复杂的多对多查询。至于其他场景,你可以自己去翻翻官方的文档,写得还是挺全面的

丹尼尔:好咧!

✎ 初始化

蛋先生:一切的开始,还是得从初始化说起。通过下面这段代码,我们就能在微信小程序中创建一个 MySQL 数据库连接实例。当然,对于 Web 应用或服务端的 Node.js 应用,也可以用类似的方式进行初始化

js 复制代码
const { init } = require("@cloudbase/wx-cloud-client-sdk");

...

wx.cloud.init({
  env: "{{这里填上你的云开发环境 ID 哦}}",
});

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

丹尼尔:OK,代码灰常的简单

蛋先生:接下来,我就用下面这三个简单的表来进行演示

✎ 简单的单表查询

蛋先生:先来演示一下最基础的单表查询

js 复制代码
// 从 `articles` 表中查询所有 `title` 包含 "云开发" 的记录
const { data, error } = await db
  .from("articles")
  .select("*")
  .like("title", "%云开发%")
  
// 返回 data 的示例值
[
  {
    id: 1,
    title: "云开发MySQL新功能详解",
  }
];

丹尼尔:单表查询确实挺简单的,一看就明白

✎ 复杂的多对多

蛋先生:那我们再来看一下多对多查询,其实也同样很直观

js 复制代码
// 从 `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 标准协议

丹尼尔:哦,那也来用两个例子演示一下吧

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

✎ 简单的单表查询

蛋先生:一样的,先来演示一个简单的单表查询

shell 复制代码
# 从 `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'

丹尼尔:不错,依然简单明了

✎ 复杂的多对多

蛋先生:最后,我们也来演示一个多对多的查询

sh 复制代码
# 从 `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"

相关推荐
薛晓刚4 小时前
AI好像除了不能解决业务问题,其他问题都能解决
ai编程
IT教程资源C5 小时前
(N_156)基于springboot,vue小区物业管理系统
mysql·vue3·前后端分离·springboot小区物业
前端双越老师5 小时前
建议应届毕业生不要再做前端开发了
人工智能·面试·ai编程
华洛5 小时前
聊一下如何稳定的控制大模型的输出格式
前端·产品经理·ai编程
半路_出家ren5 小时前
MySQL数据库,DDL,DML,查询,权限,主从复制
数据库·mysql·主从复制·权限·ddl·dml
运维成长记5 小时前
Mysql的数据备份和高可用
数据库·mysql
冻咸鱼11 小时前
MySQL基础知识大全
数据库·mysql·oracle
hskxkj14 小时前
MySQL第三次作业
数据库·mysql
冷崖17 小时前
MySQL-TrinityCore异步连接池的学习(七)
学习·mysql