flask-restful:连接到 sql 服务器数据库时如何解析参数?

flask-restful: how to parse parameters when connected to sql server db?

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

localhost/customers?cust_country=美国

我想从 table 'customers' 中提取每一行,每个人都来自美国。

这是我目前的脚本:

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 Not Found

Not Found

The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

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

第 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"

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

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

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