Deta-Base

By | 2022-12-14

1、前言在我们平时的学习中,我们经常会用到数据库,但是一般情况下数据库都需要我们自己安装部署,生产环境还需要自己购买服务器安装。

1、前言

在我们平时的学习中,我们经常会用到数据库,但是一般情况下数据库都需要我们自己安装部署,生产环境还需要自己购买服务器安装。今天我们就来介绍一款永久免费,无限存储空间的 NoSql 数据库服务 Deta 的 Base 服务。

2、快速开始

2.1、关于 Deta

其实我基础 Deta 已经很久了,趁着这次机会,我就讲其介绍给大家。

Deta 提供三个核心服务,分别是 Base、Driver、Micros。拥有 OpenApi、Cli 等操作方式。

今天我们就主要介绍 Deta 的 Base 服务。

2.2、关于 Deta 的 Base

Deta Base 是一个超级易于使用的生产级 NoSQL 数据库,具有无限的存储空间。

  • ☂️易于使用的 API。

  • 🏁超快且高度可扩展。

  • 📈无限制的数据库。

  • 👀图形用户界面。

2.3、安装 Deta

pip install deta

2.4、创建项目 & Key

最开始,我们需要注册登录 Deta。点击这里进行

登录后,我们点击New Project,输入项目名,选择区域,点击创建即可。

然后我们进入到创建的新项目中,在左侧导航栏选择 Settings,点击Create Key,创建一个项目的秘钥供后面使用。

以上创建的 Key 只会展示一次,请妥善保存。

2.5、创建数据表 & 插入数据

key = 'csdsds221312313123123DG9Nw'

# 1) 导入deta
from deta import Deta

# 2) 初始化项目
deta = Deta(key)

# 3) 创建数据表
user_info = deta.Base("user_info")

user_info.insert({
    "name": "phyger",
    "age": 18,
    "school": "XUPT"
})

fetch_res = user_info.fetch({"name": "phyger"})

for item in fetch_res.items:
    print(item["key"])

代码运行结果,打印了 item 的 key。

上面代码实际做的事情:

  1. 创建了数据表 user_info
  2. 插入了一条数据
  3. 根据 name=phyger 查询了数据
  4. 循环打印了查询结果的元素的 key 值

注意点:1、在 Deta 中操作自己的项目只需要提供项目的 Key 值即可;2、在数据表中的 key 值也是自动生成的不会重复的。

2.6、在 Deta 中查看数据表

以上代码创建的表和数据库我们都可以在 Deta 的 web 控制台中查看到。

我们在 Deta 中切换左侧导航栏到 Base,就可以看到我们的数据表和数据。

我们也可以在 web 控制台进行数据的增删改查操作。

2.7、Base 的常用 Api

Base 的常用 Api 为:

  1. put:将项目存储在数据库中。如果 Key 已经存在,它将更新项目。

  2. insert:将项目存储在数据库中,但如果该键已存在,则会引发错误。(比 put 慢 2 倍)。

  3. get:通过项的键从数据库中检索项。

  4. fetch:根据提供的(可选)过滤器从数据库中检索多个项目。

  5. delete:从数据库中删除项目。

  6. update:更新数据库中的项目

2.8、在 FastApi 中使用 Base

我们用一个 Demo 演示 FastApi 使用 Base 进行数据创建,查询和修改的操作。

创建

key = 'c0v232323sdsds6vvmLzH32323Nw'

# 1) 导入deta
from deta import Deta

# 2) 初始化项目
deta = Deta(key)

# 3) 创建数据库
user_info = deta.Base("user_info")


from fastapi import FastAPI
from fastapi.responses import JSONResponse
from pydantic import BaseModel

import uvicorn

app = FastAPI()

# 定义请求体结构
class userData(BaseModel):
    name: str
    age: int
    school: str


@app.post('/add')
async def addUser(user_data:userData): # user_data用来接收post的body
    name = user_data.name
    age = user_data.age
    school = user_data.school
    # 创建一条数据到Base
    user = user_info.put({
        "name": name,
        "age": age,
        "school": school
    })
    return JSONResponse(user, 201)


if __name__ == '__main__':
    uvicorn.run(app='base-demo:app', host='localhost', port=3311, reload=True)

add接口发起请求:

可以看到数据已经成功创建且返回了数据的详细数据。

我们在 Deta 上查看下。

查询 & 修改

@app.get('/list')
async def listUser():
    ret = user_info.fetch()
    return ret._items

# 导入json兼容编码器
from fastapi.encoders import jsonable_encoder
@app.put('/update/{userKey}')
async def updateUser(userKey,data:userData):
    ret = user_info.put(data=jsonable_encoder(data), key=userKey) # 在更新时对客户端发来的json对象进行兼容性转换
    return ret

我们对listupdate接口进行测试:

如上,当前 phyger-fast 的数据详情为:{"age":26,"key":"vrp8uq8jq343","name":"phyger-fast","school":"FastApi"}

我们调用 update 接口对其进行修改:

我们再去 Deta 控制台查看下结果:

3、最后

Deta 是一个免费为开发者提供不用开箱即可使用的数据存储产品,其目标就是为用户提供全托管的数据平台。用户无需关注数据存储运维,只需要专注业务逻辑开发即可。但是如此以来就可能存在数据安全的问题,所以建议大家重要的数据还是使用私有数据库进行存储。如果要使用 Deta 进行生产级的部署,那么建议对数据进行加密存储。