【问题标题】:flask-restful: how to parse parameters when connected to sql server db?flask-restful:连接到 sql server db 时如何解析参数?
【发布时间】:2015-10-13 14:51:20
【问题描述】:

我想使用 python 烧瓶创建一个 REST API。所以每当我这样做时:

localhost/customers?cust_country=USA

我想从每个人都来自美国的表“客户”中获取每一行。

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

from flask import Flask, request
from flask_restful import Resource, Api
from sqlalchemy import create_engine
from flask_restful import reqparse

e = create_engine("mssql+pyodbc://....")

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

parser = reqparse.RequestParser()
parser.add_argument('cust_country', type = 'string')

class Dep(Resource):
    def get(self):
        conn = e.connect()
        args = parser.parse_args()
        query = conn.execute("select * from customers where cust_country = ?", [args['cust_country']])
        print(query)
        return {'custid': [i[0] for i in query.cursor.fetchall()]}

api.add_resource(Dep, '/customers')

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

我收到此错误:

C:\Users\x>curl 127.0.0.1:5000/customers?cust_country=USA 404 不是 找到了

未找到

未找到请求的 URL 服务器。如果您手动输入 URL,请检查您的 拼写并重试。

=======================

第 2 部分:发送多个参数:

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('cust_country', type = str)
parser.add_argument('cust_name', type = str)

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

class Dep(Resource):
    def get(self):
        args = parser.parse_args()
        conn = e.connect()
        query = conn.execute("select cust_id from customers where cust_country = ? and cust_name = ?", [args['cust_country'], args['cust_name']])
        return {'custid': [i[0] for i in query.cursor.fetchall()]}

api.add_resource(Dep, '/customers')

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

这是我在 curl 中使用的:

curl "127.0.0.1:5000/customers?cust_country=USA&cust_name=Wascals"

【问题讨论】:

    标签: python flask flask-restful


    【解决方案1】:

    您可能遇到的一个错误是使用 parser.add_argument('cust_country', type = 'string') 错了。

    应该是parser.add_argument('cust_country', type = str)

    另外我建议使用app.run(debug=True),因为它可以帮助您调试简单的错误。

    【讨论】:

    • 我将其更改为 type = str 但执行此操作时仍然出现相同的错误: curl 127.0.0.1:5000/customers -d "cust_country=USA"
    • -d "cust_country=USA" 不起作用,因为您只为 get 请求编写了端点。尝试使用这个 sn-p 来测试 gist.github.com/yashmehrotra/207cb1a58a4653c75cb8 使用命令 curl "127.0.0.1:5000/customers?cust_country=USA"
    • 得到这个输出:{"hello": "USA"}
    • 现在您可以将第 15-16 行替换为您的代码,因为您现在可以捕获 b 中的 cust_country 参数。我希望这能解决您的问题。
    • 嘿呀!你能检查更新的帖子吗?如何传递多个参数?
    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 2018-01-15
    • 2012-11-17
    • 2012-09-17
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多