在 URL 字符串中传递日期时间参数
pass datetime parameter in URL string
这就是我想要调用我的 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 是冒号
在此处解析此 URL: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:\Users\x>
curl "127.0.0.1:5000/report?start=10%2F06%2F2015%2007%3A00%3A00&end=10%2F07%2F2015%2006%3A59%3A59"
{"message": "an integer is required (got type str)"}
我怀疑您的问题是您正在按索引访问字典 (args)。 Reqparse 创建一个字典,而不是一个数组。您应该使用 args['start']
和 args['end']
.
访问您的参数
您的线路将如下所示:
query = conn.execute(stat, [args['start'], args['end']])
此外,您的 return 不正确。将 return {'id': i[0]}
更改为 return {'id': i}
因为 i
在这种情况下不是数组。
最后一件事,我强烈建议使用 http://pythonhosted.org/Flask-SQLAlchemy/ 而不是使用原始 SQL 查询。
这就是我想要调用我的 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 是冒号
在此处解析此 URL: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:\Users\x> curl "127.0.0.1:5000/report?start=10%2F06%2F2015%2007%3A00%3A00&end=10%2F07%2F2015%2006%3A59%3A59" {"message": "an integer is required (got type str)"}
我怀疑您的问题是您正在按索引访问字典 (args)。 Reqparse 创建一个字典,而不是一个数组。您应该使用 args['start']
和 args['end']
.
您的线路将如下所示:
query = conn.execute(stat, [args['start'], args['end']])
此外,您的 return 不正确。将 return {'id': i[0]}
更改为 return {'id': i}
因为 i
在这种情况下不是数组。
最后一件事,我强烈建议使用 http://pythonhosted.org/Flask-SQLAlchemy/ 而不是使用原始 SQL 查询。