使用cURL将CSV文件读取到Flask Restful API

时间:2018-06-23 02:47:01

标签: python python-3.x curl flask

我正在尝试开发一种服务,以便有人可以将csv文件发送到我在数据库中转储的REST API。我的cURL请求正在读取数据,但flask_restful无法处理它。你能告诉我我在做什么错,我该如何解决?

[在下方编辑]

我在阅读文档后发现request.files允许您从表单的POST请求中读取文件。我还找到了一种通过cURL作为表单发送CSV文件的方法。

class ForBetaAndUpload(Resource):
        def post(self, kind='quotes'):

#        parser = reqparse.RequestParser()
        file = request.files['file']
        print(file)
#        kind = parser.add_argument('kind').parse_args()['kind']

        if kind:
            if file and file[-3:]=='csv':
                if kind == 'quotes':
                    try:
                        df = pd.read_csv(file)
                        df.to_sql('QUOTES', helper.conx, index=False, if_exists='append')
                        return jsonify({'message':'%s rows inserted in the databasee table successfully' %(df.shape[0])})
                    except Exception as e:
                        return jsonify({'exception': e})

                if kind == 'trace':
                    try:
                        df = pd.read_csv(todos)
                        df.iloc[:10].to_sql('TRACE', helper.conx, index=False, if_exists='append')
                        return jsonify({'message':'%s rows inserted in the databasee table successfully' %(df.shape[0])})
                    except Exception as e:
                        return jsonify({'message': e})
            else:
                return jsonify({'message': 'Please provide a csv file'})
        else:
            return jsonify({'message':'Please provide the file for to update relevant table in the databse'})


    api.add_resource(ForBetaAndUpload, '/upload', endpoint='upload')

    if __name__ == "__main__":
        app.run(debug=True)

cURL请求:

curl "https://localhost:5000/upload" -X POST -H 'Content-Type: txt/csv' -d trace.csv --insecure

我收到以下消息:

  

卷曲:(35)错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知   协议

API错误消息

  

代码400,消息错误的HTTP / 0.9请求类型   ('\ x16 \ x03 \ x01 \ x02 \ x00 \ x01 \ x00 \x01ü\ x03 \ x03 \x08Ú:ü^¢Ù〜ö7W\ x9fDyy \ x16j \x7fõ>½\ x82 \x90uÎ&3ÿZ\x08êE\ x00 \ x00' )

如何将csv文件发送到flask restful_api。我在做什么是正确的,还是有其他方法可以做到?

1 个答案:

答案 0 :(得分:1)

我从Flask读取csv的解决方案是:

在烧瓶中:

f = request.files['file']

f将成为文件的处理程序,然后您可以使用csv_reader

并发送文件:

curl -s "http://localhost:5000" \
    -F file=@./myfile.csv \
    -X POST \
    -H 'enctype:multipart/form-data ; Content-Type:multipart/form-data'

那应该可行。让我知道。