Как подключить приложение Flask к CouchDB: база данных NoSQL
Подключить Flask к базам данных SQL, таким как PostgreSQL и SQLite, несложно. Но фреймворк отлично синхронизируется и с базами данных NoSQL, такими как CouchDB. И в качестве дополнительного преимущества вы можете легко запрашивать данные при использовании CouchDB с Flask.
Готовы внести изменения, используя NoSQL, например CouchDB, с вашим приложением Flask? Вот как настроить CouchDB на локальном компьютере и подключить его с помощью Flask.
Что такое CouchDB?
CouchDB – это база данных NoSQL, которая в настоящее время принадлежит Apache Software Foundation. Программное обеспечение, написанное на 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 .
Установите последнюю версию Flask в виртуальном пространстве с помощью pip :
pip install flask
Подключить Flask к CouchDB
Чтобы начать использовать CouchDB с вашим приложением Flask, установите Flask-CouchDB , пакет времени выполнения для подключения базы данных с Flask.
Сделать это:
pip install Flask-CouchDB
После успешной установки Flask-CouchDB создайте файл app.py в этой корневой папке. Точно так же создайте файл database.py – он обрабатывает создание вашей базы данных.
Откройте database.py и импортируйте следующие пакеты:
from couchdb import Server
Затем создайте свою базу данных в том же файле, используя следующий блок кода:
from couchdb import Server
server = Server()
db = server.create('muocouch')
Запустите database.py через интерфейс командной строки. Затем откройте или обновите локальный сервер CouchDB через браузер, как вы это делали ранее. Теперь вы должны увидеть базу данных (в данном случае muocouch ), указанную в CouchDB.
Примечание. Убедитесь, что вы используете соглашение об именах в нижнем регистре для баз данных, так как CouchDB может не принимать прописные или смешанные регистры.
Сохраните свои первые данные CouchDB с помощью Flask
В конечном итоге цель любой базы данных – хранение данных. Если у вас есть база данных в CouchDB, вы можете сразу же начать сохранять в нее данные из своего приложения Flask.
Для начала откройте app.py и импортируйте следующие пакеты:
from flask import Flask
from couchdb import Server
from flaskext.couchdb import Document
Затем создайте приложение Flask и экземпляр сервера CouchDB:
app = Flask(__name__, static_url_path='/static')
app.debug=True
server = Server()
Теперь давайте сохраним некоторые пользовательские данные в CouchDB:
@app.route('/', methods=['GET', 'POST'])
def register():
user = {
"username":"media site",
"email":"[email protected]",
"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 в режим разработки перед его запуском.
Для этого выполните следующую команду через свой интерфейс командной строки:
set FLASK_ENV=development
Обратите внимание, что установка режима сервера не является обязательной. Это только упрощает отладку вашего кода.
Но независимо от настройки режима сервера вот как запустить сервер Flask через CMD:
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":"[email protected]",
"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 .
Вот и все! Вы только что создали свою первую базу данных NoSQL с помощью Flask-CouchDB.
Хотя создание и создание запросов к базам данных в CouchDB вращается вокруг примеров, которые мы выделили здесь, вы можете дополнительно изучить функциональные возможности Flask. Например, вы можете раскрутить поля ввода с помощью wtforms и флаг дубликатов , используя сообщение вспышки КОЛБУ в.
Вы даже можете передать свой запрос в jQuery JavaScript для проверки входных данных и асинхронной проверки дубликатов.
CouchDB лучше, чем базы данных SQL?
Использование CouchDB или любой другой базы данных NoSQL с Flask или любой другой технологией программирования зависит от ваших предпочтений. Но он пригодится при работе с бесструктурными данными и необработанными носителями.
Тем не менее, прежде чем принять решение, вы можете посмотреть на различия между базами данных NoSQL и SQL, чтобы решить, какая из них подходит для вашего проекта.