昨天我们尝试用koa操作MongoDB和GraphQL,今天不如试一下Flask操作MongoDB以及GraphQL。
MongoDB数据库就不需要多讲了,FlaskcaozuoMongoDB的方式主要分为两种,一种是类似原生的方法,另一种则是ORM,前者Python提供了类似pymongo之类的工具,后者则有MongoEngine。对于Flask,还有Flask-mongoengine之类的插件,然而我们并不需要这个,MongoEngine已经是一个很不错的选择了。
下面是一段向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。
使用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有了一个基本的了解,对于这么虽然不新,但却最近重新火热起来的技术,我还是充满了好奇的。未来如何走向,我们拭目以待。