如何将你的Flask应用与CouchDB连接起来:一个NoSQL数据库

488 阅读6分钟

将Flask与PostgreSQL和SQLite等SQL数据库连接是很容易的。但该框架也能与CouchDB等NoSQL数据库完美同步。作为一个额外的好处,当你使用CouchDB和Flask时,你可以轻松查询你的数据。

准备好通过在你的Flask应用中使用CouchDB这样的NoSQL来做出改变了吗?下面是如何在你的本地机器上设置CouchDB并将其与Flask连接的方法。

什么是CouchDB?

CouchDB是一个NoSQL数据库,目前由Apache软件基金会拥有。该软件用Erlang编写,于2005年首次发布。

与你最可能习惯的常规表连接的数据库不同,CouchDB是一个非关系型数据库管理系统,以原始JSON的形式存储数据。

CouchDB是非阻塞的,所以它在数据输入期间不会锁定数据库。CouchDB的一个强项是,它使用多版本并发控制策略来读写数据。所以它允许多个用户同时输入,而不会受到数据库中现有数据结构的干扰。

因此,CouchDB在查询时速度很快,在使用异步方法时也很容易操作。也就是说,这并没有使它比它的SQL同行更好。每种技术都有其优点和缺点。

CouchDB的设置

要开始使用CouchDB,请从CouchDB的官方网站下载并安装一个兼容版本

如果该最新版本不适合你,请前往CouchDB档案,下载1.6.1版本,这是CouchDB的早期版本。

一旦你安装了CouchDB,像其他桌面应用程序一样在你的电脑上运行它。

打开你的浏览器。然后将以下内容粘贴到地址栏中,启动CouchDB的服务器。

http://localhost:5984/_utils/index.html

设置Python和Flask

然而,本教程假设你已经在你的电脑上安装了Python。否则,请到python.org去,在你的电脑上安装最新版本的Python。

一旦你设置了CouchDB,就创建一个项目根文件夹。然后打开你的命令行到那个目录,创建一个Python虚拟环境

使用pip在虚拟空间中安装最新版本的Flask。

pip install flask

用CouchDB连接Flask

要开始在你的Flask应用中使用CouchDB,请安装Flask-CouchDB,这是用于将数据库与Flask连接的运行时包。

要做到这一点。

pip install Flask-CouchDB

一旦你成功安装了Flask-CouchDB,在根目录下创建一个app.py 文件。同样地,创建一个database.py文件--这将处理你的数据库创建。

打开database.py 并导入以下包。

from couchdb import Server

接下来,使用下面的代码块在同一文件中创建你的数据库。

from couchdb import Serverserver = Server()db = server.create('muocouch')

通过CLI执行database.py。然后像之前那样通过浏览器打开或刷新CouchDB的本地服务器。现在你应该看到数据库**(本例中为muocouch**)在CouchDB中列出。

Related:How to Run a Python Script

**注意:**确保你对数据库使用小写的命名规则,因为CouchDB可能不接受大写或混合大小写。

使用Flask存储你的第一个CouchDB数据

归根结底,任何数据库的目的都是存储数据。一旦你有了CouchDB的数据库,你就可以马上从你的Flask应用中开始向其中存储数据。

首先,打开app.py并导入以下包。

from flask import Flaskfrom couchdb import Serverfrom flaskext.couchdb import Document

接下来,创建一个Flask应用和CouchDB服务器实例。

app = Flask(__name__, static_url_path='/static')app.debug=Trueserver = Server()

现在让我们把一些用户的输入存储到CouchDB中。

@app.route('/', methods=['GET', 'POST'])def register():	user = {	"username":"media site", 	"email":"justmail@gmail.com",	"password":"encrypteddata"	}	db = server['muocouch'] #select the database	doc_id, doc_rev = db.save(user) #store your data in th database	return "<h2>Your data should now be in the database</h2>"

如果你愿意,你可以在运行Flask服务器之前将其设置为开发模式。

要做到这一点,通过你的CLI运行以下命令。

set FLASK_ENV=development

注意,设置服务器模式是可选的。它只是让你的代码调试变得更容易。

但不管服务器模式设置如何,这里是如何通过CMD启动Flask服务器的。

flask run

然而,Flask将你的端口默认为localhost:5000。现在,一旦你通过浏览器加载这个地址,你应该看到H2标签中的信息。

使用CouchDB查询验证数据和检查重复数据

为了进一步标准化,你可以使用查询来验证输入并防止数据库中出现重复。查询CouchDB与你使用SQL数据库的方式有点不同。

CouchDB使用它所谓的 "JavaScript视图 "来查询数据库中的数据。幸运的是,这相对简单。

在你进一步了解之前,这里是一个基本的CouchDB查询视图的样子。

map_func = '''function(doc) 	{ emit(doc.doc_rev, doc); }''' myQuery = [docType].query(db, map_func, reduce_fun=None)

现在让我们实际使用上面的代码。

#Create a document object model called "Users:"class User(Document):    doc_type = 'User'@app.route('/', methods=['GET', 'POST'])def register():   user = {   "username":"media site",    "email":"justmail@gmail.com",   "password":"encrypteddata"   }   db = server['muocouch'] #select the database   # Use the view function to fetch your data from CouchDB   map_func = '''function(doc)    { emit(doc.doc_rev, doc); }'''   # Get all the data by running a query set   myQuery = User.query(db, map_func, reduce_fun=None, reverse=True)   q = [i['username'] for i in myQuery] # Loop out all the usernames from the database   q2 = [i['email'] for i in myQuery] # Loop out all the email addresses from the database   q3 = q+q2 # Merge both queries into a single list   print(q3)   return "<h2>Your data is now in the database</h2>"

上面的代码使用User类来查询由视图函数获取的数据。密切注意查询集**(myQuery**)内的参数。

像上面那样打印q3,现在应该在命令行中输出数据库中所有的用户名和电子邮件地址。

因此,这里是你如何使用这个查询来验证用户的输入。

if not (user['username'] in q3 or user['email'] in q3):	#store your data into the database if itdoesn't exist	doc_id, doc_rev = db.save(user) 	return "<h2>Registered successfully</h2>"else:	return "<h2>Username or email exists</h2>"

每当你试图输入一个已经在数据库中的用户名或电子邮件时,刷新你的浏览器就会返回else语句。而如果你输入的是一个新的,它就会通过执行if条件成功存储你的数据。

相关内容:如何使用Python的if语句

这就是了!你刚刚使用Flask-CouchDB创建了你的第一个NoSQL数据库。

虽然在CouchDB中创建和查询数据库是围绕我们在这里强调的例子进行的,但你可以进一步探究Flask的功能。例如,你可以使用wtforms旋转输入字段,并使用Flask的消息flash标记重复的内容**。**

你甚至可以把你的查询传递给JavaScript的jQuery,以验证输入和异步检查重复。

CouchDB比SQL数据库好吗?

使用CouchDB或任何其他NoSQL数据库与Flask或任何其他编程技术取决于你的偏好。但在处理无结构数据和原始媒体时,它就会很方便。

也就是说,在你决定之前,你可能想看看NoSQL数据库和SQL数据库之间的区别,以帮助你决定哪一个适合你的项目。