使用FaunadB和Python介绍无服务器数据库
#javascript #网络开发人员 #python #动物

简介

近年来,无服务器计算已获得流行,以更快,更有效地构建应用程序。无服务器架构的关键组件之一是无服务器数据库,它消除了对数据库服务器的需求,并提供了可扩展性和灵活性来处理波动的工作负载。
FaunADB是一个无服务器NOSQL数据库,可让您构建现代应用程序,而不必担心数据库基础架构管理。在本文中,我们将探讨Faunadb的基础知识以及如何与Python一起使用Contact Manager来创建无服务器应用程序。

什么是无服务器数据库?

无服务器数据库是一个数据库,不需要任何服务器基础结构来管理或操作。相反,它提供了一个基于云的环境,可以自动管理可扩展性,可用性和其他操作任务。

什么是faunadb?

FaunAdb是一个无服务器NOSQL数据库,使您能够构建具有全局可扩展性和高性能的应用程序。它旨在对开发人员友好,并提供了一种灵活的数据模型,可让您存储结构化,半结构化和非结构化数据。

为什么要使用faunadb?

  • 无服务器体系结构:FaunadB消除了对数据库服务器的需求并提供自动缩放,因此您不必担心基础架构管理。
  • 全球分布:Faunadb建立在全球分布式体系结构上,这意味着您的数据始终可以从世界任何地方使用。
  • 开发人员友好:Faunadb为各种编程语言提供了丰富的API和SDK,使其易于与您的应用程序集成。
  • 灵活的数据模型:FaunADB支持一个灵活的数据模型,该模型允许您存储结构化,半结构化和非结构化数据,使其适用于广泛的用例。

让我们开始!

步骤1:安装所需库

要开始,我们需要安装所需的库。我们将使用Faunadb Python驱动程序,烧瓶和Dotenv库来加载环境变量。您可以使用pip:pip install faunadb flask python-dotenv
安装它们 之后,我们将克隆此github repo:https://github.com/feranmiodugbemi/ContactManager/tree/5d7d969a3ef23bb3cd81fb5b8f41e2b04883e4ba。然后,我们将在根目录中创建一个.env.gitignore文件。我们的目录中应该有这样的东西:

directory image
虽然这是一个更新的代码,但是在我们在http://localhost:5000/上运行python app.py之后,我们的UI应该看起来像这样。
UI image

步骤2:创建我们的数据库

要创建我们的数据库观看以下视频:
我们的集合应命名为“用户”

步骤4:获取我们的faunadb访问密钥

接下来,您需要设置数据库访问密钥。您可以通过在Faunadb的网站上创建帐户,然后创建一个新数据库来获取您的访问密钥。如果您不知道如何获得“访问密钥”
,请观看此视频
然后,我们将“访问密钥”存储在.env文件中。

步骤5:更新我们的UI

bceause我不会详细介绍UI。删除index.html文件中的所有内容,然后用此链接中的html替换为html:https://github.com/feranmiodugbemi/ContactManager/blob/master/templates/index.html

步骤6:设置我们的烧瓶应用程序

首先,让我们创建一个新的烧瓶应用程序并导入必要的库。我们将使用faunadb库与Faunadb进行交互,并加载环境变量。

from flask import Flask, render_template, request, flash, redirect
from faunadb import query as q
from faunadb.objects import Ref
from faunadb.client import FaunaClient
from dotenv import load_dotenv
import os

load_dotenv()
app = Flask(__name__)
app.config["SECRET_KEY"]='Feranmiodugbemi'

另外,您可以随心所欲地命名app.config
我们还需要连接到Faunadb。为此,我们将创建一个FaunaClient的新实例,然后传递我们的faunadb秘密密钥,我们将存储在环境变量中。

client = FaunaClient(
  secret=os.getenv('FAUNASECRET')
)

第7步:创建新联系

现在我们已经设置了烧瓶应用程序并连接到Faunadb,我们可以创建功能以创建,更新和删除联系人。

让我们从创建新联系人开始。我们将定义一条新路线,并向我们的HTML模板添加表单以收集必要的信息。

@app.route("/", methods=["POST", "GET"])
def hello():
    if request.method == "POST":
        name = request.form.get('name')
        occupation = request.form.get('occupation', default='')
        address = request.form.get('address', default='')
        contact = request.form.get('contact')
        email = request.form.get('email', default='')
        client.query(
            q.create(
                q.ref('collections/Users'),
                {
                    'data':{
                        'id': q.new_id(),
                        'name':name,
                        'occupation':occupation,
                        'address' : address,
                        'contact': contact,
                        'email': email
                    }
                }
            )
        )
        flash("New contact added successfully", category="success")
        return redirect('/')
    else:
        return render_template('index.html')

在此代码中,我们使用request对象从表单中检索数据。然后,我们将使用faunadbquery模块的create函数在我们的FaunadB数据库中创建新的联系人。 create函数采用两个参数:我们要添加新联系人的集合以及要添加的数据。

我们还使用flash函数向用户显示成功消息,然后将其重定向到主页。

步骤8:获得所有联系人

接下来,让我们添加功能以获取我们的Faunadb数据库中的所有联系人,并在主页上显示它们。我们将定义一个新的route,并使用查询模块中的paginate函数来检索我们集合中的所有文档,并将它们存储在名为data的列表中。然后,我们将此列表传递给index.html模板作为显示数据的参数。

# Getting all the contacts
result = client.query(
    q.map_(
        q.lambda_("x", q.get(q.var("x"))),
        q.paginate(q.documents(q.collection("Users")))
    )
)
data = [doc["data"] for doc in result["data"]]
return render_template('index.html', data=data)

我们将用上面的代码替换else语句中的代码。

步骤9:创建我们的索引

INCASE您想知道什么是索引ISð昆,索引是一种数据结构,可提高数据库表上数据检索操作的速度。它本质上是按特定顺序组织的值列表,以促进更快的搜索和检索数据。

在数据库表的一个或多个列上创建了索引,它可用于根据这些列中的值快速定位数据行。通过创建索引,可以优化数据库查询,从而产生更快的响应时间并提高性能,而Faunadb使创建索引非常容易。您可以通过遵循以下视频来创建索引:

我们的索引应命名“ user_by_id”

步骤10:添加我们的删除功能

删除功能在delete路线中实现。该路由采用id参数,用于选择要使用索引从集合中删除的文档。我们首先将id参数转换为字符串,然后使用它使用match查询在集合中搜索文档。然后,我们使用select查询来检索文档参考并使用它来删除文档。

@app.route('/delete/<int:id>')
def delete(id):
    id = str(id)
    result = client.query(
        q.select(['ref'], q.get(q.match(q.index("users_by_id"), id)))
    )
    client.query(q.delete(result))
    return redirect('/')

步骤11:添加我们的更新功能

更新功能是在update路由中实现的。此路由采用id参数,用于选择要使用索引从集合中更新的文档。我们首先将id参数转换为字符串,然后使用它使用match查询在集合中搜索文档。然后,我们使用选择查询来检索文档参考并使用它来更新文档。

@app.route('/update/<int:id>', methods=["POST"])
def update(id):
    id = str(id)
    if request.method == "POST":
        name = request.form.get('updatename')
        occupation = request.form.get('updateoccupation', default='')
        address = request.form.get('updateaddress', default='')
        contact = request.form.get('updatecontact')
        email = request.form.get('updateemail', default='')
        result = client.query(
            q.select(['ref'], q.get(q.match(q.index("users_by_id"), id)))
        )
        client.query(
            q.update(result, {
                'data':{
                    'name': name,
                    'occupation': occupation,
                    'address': address,
                    'contact': contact,
                    'email': email
                }
            })
        )
    return redirect('/')

结论

在本文中,我们展示了如何将Faunadb与Python烧瓶使用来创建一个简单的CRUD应用程序。我们为应用程序中实现的每个功能提供了解释和其他信息。我们希望本文有助于引入Faunadb并证明其在实际应用中的使用。您可以在此处获取GITHUB存储库的完整代码:https://github.com/feranmiodugbemi/ContactManager。如果您有任何疑问,请随时通过Twitter与我联系:@FeranmiOdugbemi