如何(负责任地)使用 Google 表格作为数据库 TL;DR(30 秒)限制 工作原理 端点

2025-05-24

如何负责任地使用 Google 表格作为数据库

TL;DR(30 秒)

限制

工作原理

端点

尽管数据库技术和其他工具已经取得了长足的进步,但电子表格的多功能性和直观性仍然难以匹敌。虽然将它们用于存储 COVID-19 患者数据等敏感关键应用并不明智,但每个人都知道如何使用电子表格,这意味着它们非常适合小型跨职能项目,在这些项目中,非开发人员可能需要检查或编辑数据。

在本指南中,我将向您展示如何使用 Google 表格作为数据库,并配备可通过 HTTP 访问的 API 接口。我们将使用Autocode(一个内置自动完成功能的 Node.js API 开发平台和编辑器)来部署一个简单的应用并处理 Google 的身份验证流程。我还将探讨 Google 表格的局限性,包括可扩展性,以及在哪些情况下可以考虑更复杂的替代方案。


# Returns all people in the database whose names start 
# with "bil", case-insensitive
$ curl --request GET --url \
  'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/name/istartswith/?query=bil'
Enter fullscreen mode Exit fullscreen mode
[
  {
    "Name": "Bilbo Baggins",
    "Job": "Burglar",
    "Fictional": "TRUE",
    "Born On": "9/21/1937",
    "Updated At": ""
  },
  {
    "Name": "Bill Nye",
    "Job": "Scientist",
    "Fictional": "FALSE",
    "Born On": "11/27/1955",
    "Updated At": ""
  },
  {
    "Name": "billie eilish",
    "Job": "Artist",
    "Fictional": "FALSE",
    "Born On": "12/18/2001",
    "Updated At": ""
  }
]
Enter fullscreen mode Exit fullscreen mode

只需一个 Google 帐户和一个免费的 Autocode 帐户,即可开始使用。开始吧!

TL;DR(30 秒)

首先,您需要点击此处,然后按右上角的“使用模板”来克隆您自己的 Google Sheet 模板副本。这会将示例电子表格添加到您的个人 Google 帐户。

完成后,点击此处在 Autocode 中打开入门应用。如果您愿意,可以浏览一下源代码,然后按下绿色按钮将应用安装到您的 Autocode 帐户。当系统提示您关联 Google Sheet 时,请按照流程中的说明关联您的 Google 帐户,然后选择您刚刚克隆的电子表格。

之后,您的应用就可以运行了!尝试通过 URL 访问几个端点,看看返回了什么,以及您的新电子表格数据库发生了什么。您可以查看Endpoints下面的示例调用部分。

限制

总结起来很简单,对吧?那么为什么不把所有东西都建在 Google 表格上呢?

虽然只需 30 秒即可设置完成且人人皆可交互的后端极具吸引力,但也存在一些明显的局限性。如上所述,作为数据库的电子表格本身并不支持多表或多行关系。此外,它也没有强制指定列的类型、事务、内置备份或加密的概念,因此敏感/关键数据(例如 COVID-19 患者数据)最好存储在其他地方。

在可扩展性方面,Google Sheets 的单元格数量(包括空白单元格)有 5,000,000 个的硬性限制。然而,当我尝试通过创建包含这么多值的电子表格来验证这一点时,却在该阈值之前遇到了严重的性能问题:

像粘贴大量单元格这样的批量操作速度会变慢,当单元格数量达到 100 万左右时,速度会开始下降。导航也变得迟缓。

我进行 API 调用的实验也得到了类似的结果。查询速度似乎与单元格数量呈线性关系:

当单元格数量达到 50 万左右时,查询速度会变得异常缓慢,但对于 10 万个单元格的查询,查询时间仍然低于 2 秒。因此,如果您预计数据集将超过几十万个单元格,那么选择更具可扩展性的方案可能是明智之举。

工作原理

当您将克隆的 Google Sheet 链接到您的应用并将其安装到您的帐户时,Autocode 会使用您的应用的令牌自动处理您的应用和您的 Google 帐户之间的身份验证(请参阅const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN})所有端点顶部的行)。

对于实际查询,每个端点都包含 Node.js 代码,用于从googlesheets.query API调用方法。这些 API 采用一个以A1 格式range格式化的参数,该参数对应于 API 调用应视为数据库一部分的电子表格部分。

let queryResult = await lib.googlesheets.query['@0.3.0'].select({
  range: `A:E`,
  bounds: 'FULL_RANGE',
  where: [{
    'Name__istartswith': query
  }]
});
Enter fullscreen mode Exit fullscreen mode

range本质上是“将电子表格中A列到EA:E列的所有行用作我的数据库”的简写。查询会将该范围内每列的第一行解释为该列中值的字段名称。给定您克隆的模板,上述查询将检查A列(名为)中的所有值,以查找与查询值匹配的行。Name

这些 API 调用使用KeyQL 查询语言。如果您有兴趣深入了解,可以查看更多示例。

呼叫端点

如前所述,这些端点可以通过 HTTP 访问,因此您可以通过 、 或任何其他您喜欢的 HTTP 客户端来调用它们fetchcURL您可以直接使用 Web 浏览器:

您甚至可以使用端点用来调用 Google Sheets API 的相同lib-node Node 包:

您的端点将响应 GET 或 POST 请求。对于 GET 请求,参数会从查询字符串中解析;对于 POST 请求,参数会从请求正文中解析。为了清晰起见,每个端点都设置了默认参数。您可以在下方找到每个端点的示例。

端点

函数/选择/作业/contains.js

此端点是 KeyQL 查询的一个示例contains。它会在链接的 Google Sheet 中查找字段Job包含与参数 匹配的子字符串(区分大小写)的行query。从示例工作表中,它返回:

$ curl --request GET --url \
  'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/job/contains/?query=ist'
Enter fullscreen mode Exit fullscreen mode
[
  {
    "Job": "Mistborn",
    "Born On": "2006-07-17",
    "Fictional": "TRUE",
    "Name": "Vin Venture",
    "Updated At": ""
  },
  {
    "Job": "Scientist",
    "Born On": "1955-11-27",
    "Name": "Bill Nye",
    "Fictional": "FALSE",
    "Updated At": ""
  },
  {
    "Job": "Artist",
    "Born On": "2001-12-18",
    "Name": "billie eilish",
    "Fictional": "FALSE",
    "Updated At": ""
  }
]
Enter fullscreen mode Exit fullscreen mode

函数/选择/born_on/date_gt.js

此端点是 KeyQL 查询的一个示例date_gt。它会在链接的 Google Sheet 中查找字段Born On位于query参数之后的行,格式为2000/01/01。从示例工作表中,它返回:

$ curl --request GET --url \
  'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/born_on/date_gt/?query=2000/01/01'
Enter fullscreen mode Exit fullscreen mode
[
  {
    "Job": "Mistborn",
    "Born On": "2006/07/17",
    "Fictional": "TRUE",
    "Name": "Vin Venture",
    "Updated At": ""
  },
  {
    "Job": "Artist",
    "Born On": "2001/12/18",
    "Name": "billie eilish",
    "Fictional": "FALSE",
    "Updated At": ""
  }
]
Enter fullscreen mode Exit fullscreen mode

函数/选择/名称/istartswith.js

此端点是 KeyQL 查询的一个示例istartswith。它会在链接的 Google Sheet 中查找字段Namequery参数(不区分大小写)开头的行。在示例表格中,它返回:

$ curl --request GET --url \
  'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/name/istartswith/?query=bil'
Enter fullscreen mode Exit fullscreen mode
[
  {
    "Job": "Scientist",
    "Born On": "1955-11-27",
    "Name": "Bill Nye",
    "Fictional": "FALSE",
    "Updated At": ""
  },
  {
    "Job": "Artist",
    "Born On": "2001-12-18",
    "Name": "billie eilish",
    "Fictional": "FALSE",
    "Updated At": ""
  },
  {
    "Job": "Burglar",
    "Born On": "1937-09-21",
    "Fictional": "TRUE",
    "Name": "Bilbo Baggins",
    "Updated At": ""
  }
]
Enter fullscreen mode Exit fullscreen mode

函数/insert.js

此端点是插入查询的一个示例。它将输入参数传递给googlesheets.query.insertfieldsets API的参数 。例如,要添加到电子表格,您可以发出以下请求(所有参数均为小写):
Bill Gates

$ curl --request POST \
  --header "Content-Type: application/json" \
  --data '{"name":"Bill Gates","job":"CEO","fictional":false,"bornOn":"10/28/1955"}' \
  --url 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/insert/'
Enter fullscreen mode Exit fullscreen mode

注意: Autocode API 不会专门响应一种 HTTP 方法,而是依赖描述性命名来避免功能混淆。

函数/update.js

此端点是更新查询的一个示例。它设置Updated At姓名与参数完全匹配的人员字段name,并根据输入参数更新其他字段。它使用googlesheets.query.update API
例如,要更新电子表格中的Job字段,您可以发出以下请求(所有参数均为小写):Bilbo BagginsRing Bearer

$ curl --request POST \
  --header "Content-Type: application/json" \
  --data '{"name":"Bilbo Baggins","job":"Ring Bearer"}' \
  --url 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/update/'
Enter fullscreen mode Exit fullscreen mode

注意:如果多行符合查询条件,则这可能会影响多行。

函数/delete.js

此端点是删除查询的一个示例。它会删除
姓名与参数完全匹配的人员行name。它使用googlesheets.query.delete API。例如,要从Bilbo Baggins电子表格中删除人员,您可以发出以下请求:

$ curl --request GET --url \
  'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/delete/?name=Bilbo%20Baggins'
Enter fullscreen mode Exit fullscreen mode

注意:如果多行符合查询条件,则这可能会影响多行。

谢谢你!

如果您有任何问题或反馈,最好的办法是加入 Autocode 社区的 Slack 频道。您可以从网站顶部栏的“社区”标签页获取邀请。您也可以直接在 Twitter 上联系我@Hacubu

如果您想了解 Autocode 的最新动态,可以关注@AutocodeHQ。祝您黑客愉快!

文章来源:https://dev.to/hacubu/how-to-use-google-sheets-as-a-database-responsible-3ohk
PREV
坚实的原则:从面向对象编程开始
NEXT
十大 VS Code 主题