Swagger 中带有 py2neo 和烧瓶的 API 端点

问题描述

我最近开始使用 Swagger、py2neo 和 Flask 库来完成我自己学习的端到端项目。

我打算使用 py2neo,因为使用此驱动程序为 neo4j 创建查询比使用 neo4j 驱动程序本身更容易。

我正在尝试重现 https://github.com/neo4j-examples/neo4j-movies-template,特别是 app.py,以便我可以在 swagger ui 中看到它。

对于 GET

一切正常

但是,当我执行 POST 时,我无法更新数据库。 (

see screenshot of swagger UI

)

如何解决客户端-服务器 POST?

class RateMovie(Resource):
    @swagger.doc({
        'tags': ['movies'],'summary': 'Rate a movie from','description': 'Rate a movie from 0-5 inclusive','parameters': [
            
            {
                'name': 'id','description': 'movie tmdbId','in': 'path','type': 'string',},{
                'name': 'rating','in': 'body','schema': {
                    'type': 'object','properties': {
                        'rating': {
                            'type': 'integer',}
                }
            },],'responses': {
            '200': {
                'description': 'movie rating saved'
            },'401': {
                'description': 'invalid / missing authentication'
            }
        }
    })


    def post(self):

        parser = reqparse.RequestParser()
        parser.add_argument('rating',choices=list(range(0,6)),type=int,required=True,help='A rating from 0 - 5 inclusive (integers)')
        args = parser.parse_args()
        rating = args['rating']

        def rate_movie(movie_id,rating):
            db=get_db()
            query='''
            MERGE (m:Movie)
            WITH m

            MATCH (m:Movie) 
            where m.title='{}'
            SET m.rating = {}
            RETURN m
            '''.format(movie_id,rating)

            result = db.run(query)
            return [i for i in result]

        return {}



api.add_resource(RateMovie,'/api/v0/ratemovie')

然后我在 Swagger UI 中执行“TRY IT OUT”。

我收到以下回复

127.0.0.1 - - [10/Mar/2021 15:08:57] "POST /api/v0/ratemovie HTTP/1.1" 200 -

但是当我运行查询时,数据库仍然没有更新。

但是,如果我独立运行

def rate_movie(movie_id,rating):
    db=get_db()
    query='''
    MERGE (m:Movie)
    WITH m

    MATCH (m:Movie) 
    where m.title='{}'
    SET m.rating = {}
    RETURN m
    '''.format(movie_id,rating)

    result = db.run(query)
    return [i for i in result]




print(rate_movie(movie_id='The Matrix Reloaded',rating=10))

数据库得到更新。

如何解决客户端-服务器 POST?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)