FlaskアプリをCouchDBに接続する方法:NoSQLデータベース

FlaskをPostgreSQLやSQLiteなどのSQLデータベースに接続するのは簡単です。ただし、フレームワークはCouchDBなどのNoSQLデータベースとも完全に同期します。また、追加の利点として、FlaskでCouchDBを使用すると、データを簡単にクエリできます。

FlaskアプリでCouchDBのようなNoSQLを使用して変更を加える準備はできましたか?ローカルマシンにCouchDBをセットアップし、Flaskに接続する方法は次のとおりです。

CouchDBとは何ですか?

CouchDBは、現在Apache SoftwareFoundationが所有しているNoSQLデータベースです。 Erlangで書かれたこのソフトウェアは、2005年に最初にリリースされました。

よく使用される通常のテーブルリンクデータベースとは異なり、CouchDBは、データを生のJSONとして格納する非リレーショナルデータベース管理システムです。

CouchDBは非ブロッキングであるため、データ入力中にデータベースをロックしません。 CouchDBの長所の1つは、マルチバージョン同時実行制御ポリシーを使用してデータの読み取りと書き込みを行うことです。そのため、データベース内のデータの既存の構造に干渉することなく、複数のユーザーからの同時入力が可能になります。

したがって、CouchDBはクエリ中は高速で、非同期メソッドを使用している間は簡単に操作できます。とは言うものの、これはSQLの対応物よりも優れているわけではありません。それぞれのテクノロジーには長所と短所があります。

CouchDBのセットアップ

CouchDBの使用を開始するには、 CouchDBの公式Webサイトから互換性のあるバージョンをダウンロードしてインストールします

また、その最新バージョンが機能しない場合は、 CouchDBアーカイブに進み、 CouchDBの以前のバージョンであるバージョン1.6.1をダウンロードします。

CouchDBをインストールしたら、他のデスクトップアプリと同じようにPCで実行します。

ブラウザを開きます。次に、以下をアドレスバーに貼り付けて、CouchDBのサーバーを起動します。

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

PythonとFlaskを設定する

ただし、このチュートリアルでは、PCにPythonがすでにインストールされていることを前提としています。それ以外の場合は、 python.orgにアクセスして、最新バージョンのPythonをPCにインストールします。

CouchDBをセットアップしたら、プロジェクトのルートフォルダーを作成します。次に、そのディレクトリへのコマンドラインを開き、 Python仮想環境を作成します

pipを使用して仮想空間にFlaskの最新バージョンをインストールします。

 pip install flask

FlaskをCouchDBに接続する

FlaskアプリでCouchDBの使用を開始するには、データベースをFlaskに接続するためのランタイムパッケージであるFlask-CouchDBをインストールします。

これをする:

 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')

CLIを介してdatabase.pyを実行します。次に、前に行ったように、ブラウザーを介してCouchDBのローカルサーバーを開くか更新します。これで、CouchDBにリストされたデータベース(この場合はmuocouch )が表示されます。

関連: Pythonスクリプトを実行する方法

注: CouchDBは大文字または大文字と小文字の混合を受け入れない可能性があるため、データベースには必ず小文字の命名規則を使用してください。

Flaskを使用して最初のCouchDBデータを保存する

最終的に、データベースの目的はデータストレージです。 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":"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クラスを使用して、view関数によってフェッチされたデータをクエリします。クエリセット( 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条件を実行することでデータが正常に保存されます。

関連: Pythonifステートメントの使用方法

それでおしまい! Flask-CouchDBを使用して最初のNoSQLデータベースを作成しました。

CouchDBでのデータベースの作成とクエリは、ここで強調した例を中心に展開していますが、Flaskの機能をさらに詳しく調べることができます。たとえば、 wtformsを使用して入力フィールドをスピンアップし、Flaskのメッセージフラッシュを使用して重複にフラグを立てることができます。

クエリをJavaScriptのjQueryに渡して、入力を検証し、重複を非同期でチェックすることもできます。

CouchDBはSQLデータベースよりも優れていますか?

Flaskまたはその他のプログラミングテクノロジでCouchDBまたはその他のNoSQLデータベースを使用するかどうかは、好みによって異なります。しかし、構造のないデータや生のメディアを扱うときに便利です。

とは言うものの、決定する前に、NoSQLデータベースとSQLデータベースの違いを調べて、どちらがプロジェクトに適しているかを判断するのに役立てることができます。