Como conectar seu aplicativo Flask ao CouchDB: um banco de dados NoSQL
Conectar o Flask com bancos de dados SQL como PostgreSQL e SQLite é muito fácil. Mas a estrutura sincroniza perfeitamente com bancos de dados NoSQL, como CouchDB, também. E como um benefício adicional, você pode consultar seus dados facilmente ao usar o CouchDB com o Flask.
Pronto para fazer uma mudança usando um NoSQL como o CouchDB com seu aplicativo Flask? Veja como configurar o CouchDB em sua máquina local e conectá-lo ao Flask.
O que é CouchDB?
CouchDB é um banco de dados NoSQL atualmente de propriedade da Apache Software Foundation. Escrito com Erlang, o software foi lançado pela primeira vez em 2005.
Ao contrário dos bancos de dados vinculados a tabelas regulares com os quais você provavelmente está acostumado, o CouchDB é um sistema de gerenciamento de banco de dados não relacional que armazena dados como JSON bruto.
O CouchDB não bloqueia, portanto, não bloqueia o banco de dados durante a entrada de dados. Um dos pontos fortes do CouchDB é que ele usa uma política de controle de simultaneidade de várias versões para ler e gravar dados. Portanto, ele permite entradas simultâneas de vários usuários sem interferência da estrutura de dados existente no banco de dados.
Portanto, o CouchDB é rápido durante as consultas e fácil de trabalhar ao usar métodos assíncronos. Dito isso, isso não o torna melhor do que sua contraparte SQL. Cada tecnologia tem seus prós e contras.
Configuração do CouchDB
Para começar a usar o CouchDB, baixe e instale uma versão compatível do site oficial do CouchDB .
E se a versão mais recente não funcionar para você, prossiga para o arquivo CouchDB e baixe a versão 1.6.1, que é uma versão anterior do CouchDB.
Depois de instalar o CouchDB, execute-o em seu PC como faria com qualquer outro aplicativo de desktop.
Abra seu navegador. Em seguida, inicie o servidor CouchDB colando o seguinte em sua barra de endereço:
http://localhost:5984/_utils/index.html
Configurar Python e Flask
Este tutorial, no entanto, assume que você já possui o Python instalado em seu PC. Caso contrário, vá para python.org e instale a versão mais recente do Python em seu PC.
Depois de configurar o CouchDB, crie uma pasta raiz do projeto. Em seguida, abra sua linha de comando para esse diretório e crie um ambiente virtual Python .
Instale a versão mais recente do Flask no espaço virtual usando pip :
pip install flask
Conecte o frasco ao CouchDB
Para começar a usar o CouchDB com seu aplicativo Flask, instale o Flask-CouchDB , o pacote de tempo de execução para conectar o banco de dados ao Flask.
Para fazer isso:
pip install Flask-CouchDB
Depois de instalar o Flask-CouchDB com êxito, crie um arquivo app.py nessa pasta raiz. Da mesma forma, crie um arquivo database.py – isso lida com a criação do seu banco de dados.
Abra database.py e importe os seguintes pacotes:
from couchdb import Server
Em seguida, crie seu banco de dados nesse mesmo arquivo usando o seguinte bloco de código:
from couchdb import Server
server = Server()
db = server.create('muocouch')
Execute database.py por meio da CLI. Em seguida, abra ou atualize o servidor local do CouchDB por meio de seu navegador, como fez anteriormente. Agora você deve ver o banco de dados ( muocouch , neste caso) listado no CouchDB.
Nota: Certifique-se de usar uma convenção de nomenclatura em minúsculas para bancos de dados, pois o CouchDB pode não aceitar maiúsculas ou mistas.
Armazene seus primeiros dados CouchDB usando Flask
Em última análise, o objetivo de qualquer banco de dados é o armazenamento de dados. Depois de ter um banco de dados no CouchDB, você pode começar a armazenar dados nele a partir de seu aplicativo Flask imediatamente.
Para começar, abra app.py e importe os seguintes pacotes:
from flask import Flask
from couchdb import Server
from flaskext.couchdb import Document
Em seguida, crie um aplicativo Flask e uma instância do servidor CouchDB:
app = Flask(__name__, static_url_path='/static')
app.debug=True
server = Server()
Agora, vamos armazenar algumas entradas do usuário no 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>"
Se desejar, você pode definir seu servidor Flask para o modo de desenvolvimento antes de executá-lo.
Para fazer isso, execute o seguinte comando por meio de sua CLI:
set FLASK_ENV=development
Observe que a configuração do modo do servidor é opcional. Isso apenas torna a depuração do seu código mais fácil.
Mas, independentemente da configuração do modo do servidor, veja como iniciar o servidor Flask por meio do CMD:
flask run
O Flask, entretanto, padroniza sua porta para localhost: 5000 . Agora você deve ver a mensagem na tag H2 assim que carregar este endereço por meio de seu navegador.
Validar dados e verificar duplicatas usando consultas CouchDB
Para padronizar isso ainda mais, você pode usar consultas para validar entradas e evitar duplicatas em seu banco de dados. Consultar o CouchDB é um pouco diferente de como você faz isso com bancos de dados SQL.
O CouchDB usa o que chama de "visualizações JavaScript" para consultar dados do banco de dados. Felizmente, isso é relativamente simples.
Antes de prosseguir, esta é a aparência de uma visualização de consulta CouchDB básica:
map_func = '''function(doc)
{ emit(doc.doc_rev, doc); }'''
myQuery = [docType].query(db, map_func, reduce_fun=None)
Agora vamos usar o código acima de forma prática:
#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>"
O código acima usa a classe User para consultar os dados buscados pela função de visualização. Preste muita atenção aos parâmetros dentro do conjunto de consultas ( myQuery ).
Imprimir q3 , como você fez acima, agora deve produzir todos os nomes de usuário e endereços de e-mail no banco de dados na linha de comando.
Então, veja como você pode usar essa consulta para validar as entradas dos usuários:
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>"
Atualizar seu navegador retorna a instrução else cada vez que você tenta inserir um nome de usuário ou um e-mail que já está no banco de dados. E se você estiver inserindo um novo, ele armazena com sucesso seus dados executando a condição if .
É isso! Você acabou de criar seu primeiro banco de dados NoSQL usando Flask-CouchDB.
Embora a criação e consulta de bancos de dados no CouchDB gire em torno dos exemplos que destacamos aqui, você pode explorar mais as funcionalidades do Flask. Por exemplo, você pode aumentar os campos de entrada usando wtforms e sinalizar duplicatas usando o flash de mensagem do Flask.
Você pode até mesmo passar sua consulta para jQuery do JavaScript para validar entradas e verificar duplicatas de forma assíncrona.
O CouchDB é melhor do que os bancos de dados SQL?
Usar CouchDB ou qualquer outro banco de dados NoSQL com Flask ou qualquer outra tecnologia de programação depende de sua preferência. Mas é útil ao lidar com dados sem estrutura e mídia bruta.
Dito isso, antes de decidir, você pode querer examinar as diferenças entre os bancos de dados NoSQL e SQL para ajudá-lo a decidir qual deles é adequado para o seu projeto.