简介
近年来,无服务器计算已获得流行,以更快,更有效地构建应用程序。无服务器架构的关键组件之一是无服务器数据库,它消除了对数据库服务器的需求,并提供了可扩展性和灵活性来处理波动的工作负载。
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
文件。我们的目录中应该有这样的东西:
虽然这是一个更新的代码,但是在我们在http://localhost:5000/
上运行python app.py
之后,我们的UI应该看起来像这样。
步骤2:创建我们的数据库
要创建我们的数据库观看以下视频:
对步骤3:创建我们的收藏
收集只是数据库中相关数据或文档的分组。要创建我们的集合观看此视频:
我们的集合应命名为“用户” 。
步骤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
对象从表单中检索数据。然后,我们将使用faunadb
的query
模块的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