【问题标题】:pass datetime parameter in URL string在 URL 字符串中传递 datetime 参数
【发布时间】:2016-01-11 12:33:41
【问题描述】:

这就是我想在日期范围内调用我的 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:\用户\x> curl "127.0.0.1:5000/report?start=10%2F06%2F2015%2007%3A00%3A00&end=10%2F07%2F2015%2006%3A59%3A59" {"message": "需要一个整数(得到类型 str)"}

【问题讨论】:

  • report.dates 是整数字段还是日期时间字段?
  • 它是sql数据库中的一个日期时间字段

标签: python flask flask-sqlalchemy flask-restful


【解决方案1】:

我怀疑您的问题是您正在按索引访问 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 查询。

【讨论】:

  • 奇怪。尝试在 SQL 查询中使用命名参数,而不是位置参数。它看起来像 select id from report where dates between :start and :endquery = conn.execute(stat, start=args['start'], end=args['end'])
  • 嘿布莱恩!谢谢你的帮助。通过将最后一行更改为此修复它: return {'id': str(i[0])}
猜你喜欢
  • 2014-02-20
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 2018-08-05
相关资源
最近更新 更多