在URL字符串

时间:2015-10-13 16:38:26

标签: python flask flask-sqlalchemy flask-restful

这就是我想在日期范围内调用我的REST API过滤的方法:

curl" 127.0.0.1:5000 / report?start = 10%2F06%2F2015%2007%3A00%3A00& end = 10%2F07%2F2015%2006%3A59%3A59"

其中%2F是正斜杠 和%3A是冒号

在此处解析此网址:http://www.freeformatter.com/url-parser-query-string-splitter.html 我得到了正确的字段

这是我到目前为止的脚本:

from flask import Flask
from flask_restful import Resource, Api
from flask_restful import reqparse
from sqlalchemy import create_engine
e = create_engine("x")

parser = reqparse.RequestParser()
parser.add_argument('start', type = str)
parser.add_argument('end', type = str)

app = Flask(__name__)
api = Api(app)

class Report(Resource):

    def get(self):
        args = parser.parse_args()
        conn = e.connect()

        stat = """
        select id from report where dates between ? and ?
        """

        query = conn.execute(stat, [[args[0], args[1]])

        for i in query.cursor.fetchall():
            return {'id': i[0]}

api.add_resource(Report, '/report')

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

这是我得到的错误:

  

C:\用户\ X>   curl" 127.0.0.1:5000 / report?start = 10%2F06%2F2015%2007%3A00%3A00& end = 10%2F07%2F2015%2006%3A59%3A59"    {" message":"需要一个整数(得到类型str)"}

1 个答案:

答案 0 :(得分:2)

我怀疑你的问题是你是通过索引访问dict(args)。 Reqparse创建一个字典,而不是一个数组。您应该使用args['start']args['end']访问您的参数。

你的行看起来像这样:

query = conn.execute(stat, [args['start'], args['end']])

此外,您的退货不正确。将return {'id': i[0]}更改为return {'id': i},因为在这种情况下i不是数组。

最后一点,我强烈建议使用http://pythonhosted.org/Flask-SQLAlchemy/而不是使用原始SQL查询。