当前位置: 首页 > 工具软件 > flask-graphql > 使用案例 >

Flask操作MongoDB(Mongoengine)和GraphQL

马欣德
2023-12-01

昨天我们尝试用koa操作MongoDB和GraphQL,今天不如试一下Flask操作MongoDB以及GraphQL。

MongoDB数据库就不需要多讲了,FlaskcaozuoMongoDB的方式主要分为两种,一种是类似原生的方法,另一种则是ORM,前者Python提供了类似pymongo之类的工具,后者则有MongoEngine。对于Flask,还有Flask-mongoengine之类的插件,然而我们并不需要这个,MongoEngine已经是一个很不错的选择了。

Mongoengine and add data

下面是一段向MongoDB存入数据的demo:

from flask import Flask
from flask_restful import Resource, Api
from mongoengine import *


app = Flask(__name__)
api = Api(app)
connect('flask_mongo')


class Home(Resource):

    def get(self):
        todo1 = ResourceModel(name='asen', sex='nan', location='China')
        todo1.save()
        return {'status': 'success', 'message': 'Flask restful is running'}


class ResourceModel(Document):
    meta = {
        'collection': 'todo',
        'ordering': ['-create_at'],
        'strict': False,
    }
    name = StringField(max_length=255, required=True)
    sex = StringField(max_length=100)
    location = StringField(max_length=255)


api.add_resource(Home, '/')


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

因为Flask-restful用的比较习惯,所以我们继续使用这个,demo做到了当打开根页面时,我们会把基于ResourceModel模板类格式的数据插入到MongoDB的"flask_mongo"之中,如果这样,集合的名字会是:“todo”。

这时,数据我们访问一下根界面,可以看到flask_mongo数据库中已经生成了“todo” collection。

graphql

使用Flask操作graphql也有很多种方式,现在用的最多的是graphene插件,还有星数不多,但是看起来也有很多人在用的"flask-graphql"。

因为我也没有一一使用,不好比较然后推荐大家用哪个,只是相对看起来graphene还是做的不错的,还提供了"graphene_sqlalchemy"插件来更好的与Flask-sqlalchemy集成,但是由于我们这次演示使用的是mongoengine,所以也没必要非要使用这一套。这里就拿flask-graphql简单做个例子:

from flask import Flask
from flask_graphql import GraphQLView
import graphene

app = Flask(__name__)


class Query(graphene.ObjectType):
    hello = graphene.String(name=graphene.String(default_value="stranger"))

    def resolve_hello(self, name):
        return 'Hello ' + name


schema = graphene.Schema(query=Query)

app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql',schema=schema, graphiql=True))

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

 与node操作非常类似,我们打开"localhost:5000/graphql",也能看见可视化操作graphql的界面。其他和数据库相关的操作就不先演示了。

这几天一直在尝试学习一下graphql,虽然浅尝辄止,但是也对graphql有了一个基本的了解,对于这么虽然不新,但却最近重新火热起来的技术,我还是充满了好奇的。未来如何走向,我们拭目以待。

 

 

 类似资料: