Python 3 – MongoDBでFlaskを設定する方法

前回の記事の単純なRESTサービスでは、データはファイルに保存されます。 これは面倒な場合があり、すべてのリクエストを読み取ったり、ファイルを書き込んだりする必要があります。より良い方法は、データベースを使用することです(MongoDB

MongoDBは人気のあるデータベースですが、他のデータベースとは異なり、NoSQLデータベースプログラムとして分類されます(MongoDBはスキーマを使用してJSONのようなドキュメントを使用します)。

関連コース: Python Flask:Flaskを使用してWebアプリを作成する

データモデルの作成

モデル

データベースを使用してデータを保存したいので、ネイティブを使用できます pymongo MongoDBを操作するために、しかしここでは操作を単純化する必要があるので、データモデルを作成する必要があります。

データモデルの主な機能は、データに含まれるフィールド、各フィールドのタイプ、属性(一意、またはいくつかの固定値の1つ)などを表示することです。これにより、次の情報を知ることができます。データベース内のデータを見ていなくても、データを操作するときは常にデータを使用します。

ここでは、MongoDBのFlask拡張機能を紹介します。 MongoEngine。 MongoEngineは、Flaskに依存せずに単独で使用できますが、Flaskと組み合わせて使用​​することもできます。

FlaskでMongoEngineを使用するには、MongoEngineをサーバーで初期化する前に、まずFlaskでMongoDBの情報を構成する必要があります。これにより、データベースとサーバーが接続されます。これはコードで言うことができます。

1
2
3
4
5
6
7
app.config['MONGODB_SETTINGS'] = {
'db': 'your_database',
'host': 'localhost',
'port': 27017
}
db = MongoEngine()
db.init_app(app)

mongodb情報を構成した後、MongoEngineを使用してデータモデルを作成できます。

名前とメールアドレスの2つのフィールドのみでモデルを作成します。

1
2
3
class User(db.Document):
name = db.StringField()
email = db.StringField()

このようにして、データモデルが作成され、完全なコード全体は次のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21


from flask import Flask
from flask_mongoengine import MongoEngine

app = Flask(__name__)

app.config['MONGODB_SETTINGS'] = {
'db': 'your_database',
'host': 'localhost',
'port': 27017
}
db = MongoEngine()
db.init_app(app)

class User(db.Document):
name = db.StringField()
email = db.StringField()

if __name__ == "__main__":
app.run(debug=True)

関連コース: Python Flask:Flaskを使用してWebアプリを作成する

データへのアクセス

クエリ

次に、データベース内のデータをモデルを介して編集および編集する方法を説明します。

クエリなど、MongoEngineの更新と削除をクエリするのは非常に簡単です。次を使用できます。

1
User.objects(name="alice").first()

このステートメントは、データベース内の名前がaliceであるユーザーに照会しました。 ステートメントがどのように照会されたかを分析してみましょう。

まず、User.objects、ここのUserは、それがモデルであることをすでに知っています。UserはすでにModelであるため、なぜそれがまだオブジェクトのようであるのですか?

これは、ユーザーが モデル、モデル自体はデータ構造のみを表すためです。

それは私たちのクエリと何の関係がありますか?

オブジェクトは、Userテーブルのレコードのすべてのデータを表します。

このようにして、Userオブジェクトをクエリします。

クエリを追加

新しいレコードの追加はさらに簡単です。 たとえば、lauraという名前のユーザーを挿入したいと思います。 email = [email protected]、これを書くことができます:

とても簡単です。まず、Userオブジェクトを作成してから、saveメソッドを呼び出します。

クエリを削除する

レコードを削除する場合は、最初にこのレコードを削除する必要があります。 MongoEngineでは次のようになります。レコードを削除する場合は、レコードを見つけてクエリを使用します。

1
user = User.objects(name="alice").first()

見つかったら、deleteメソッドを呼び出して次のことを行うのは簡単です。

このようにして、ユーザーaliceを削除します。

更新

更新と削除の場合と同様に、レコードを更新する必要がある場合は、ローラのメールボックスを次のように更新する必要があると仮定して、最初に彼を見つける必要があります。 laura @outlook.com、これを書くことができます:

最初のステートメントはクエリ、2番目のステートメントはupdateメソッドを使用し、変更が必要な属性と変更された値をパラメーターとして直接渡します。

MongoDBの例

完全なコードは次のようになり、モデルを使用して追加と削除を行う方法を知っています。次に、この知識をRESTサービスに適用します。書き換え後のコードは、次のとおりです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61


import json
from flask import Flask, request, jsonify
from flask_mongoengine import MongoEngine

app = Flask(__name__)
app.config['MONGODB_SETTINGS'] = {
'db': 'your_database',
'host': 'localhost',
'port': 27017
}
db = MongoEngine()
db.init_app(app)

class User(db.Document):
name = db.StringField()
email = db.StringField()
def to_json(self):
return {"name": self.name,
"email": self.email}

@app.route("https://pythonbasics.org/", methods=['GET'])
def query_records():
name = request.args.get('name')
user = User.objects(name=name).first()
if not user:
return jsonify({'error': 'data not found'})
else:
return jsonify(user.to_json())

@app.route("https://pythonbasics.org/", methods=['PUT'])
def create_record():
record = json.loads(request.data)
user = User(name=record['name'],
email=record['email'])
user.save()
return jsonify(user.to_json())

@app.route("https://pythonbasics.org/", methods=['POST'])
def update_record():
record = json.loads(request.data)
user = User.objects(name=record['name']).first()
if not user:
return jsonify({'error': 'data not found'})
else:
user.update(email=record['email'])
return jsonify(user.to_json())

@app.route("https://pythonbasics.org/", methods=['DELETE'])
def delete_record():
record = json.loads(request.data)
user = User.objects(name=record['name']).first()
if not user:
return jsonify({'error': 'data not found'})
else:
user.delete()
return jsonify(user.to_json())

if __name__ == "__main__":
app.run(debug=True)

スクリプトは、導入したすべてのCRUDメソッドを使用します。

関連コース: Python Flask:Flaskを使用してWebアプリを作成する

Hope this helps!

Source link