Python 强制SOLR查询的输出作为CSV下载

Python 强制SOLR查询的输出作为CSV下载,python,csv,solr,flask,xls,Python,Csv,Solr,Flask,Xls,我将SOLR与Flask(python)包装器一起使用,该包装器通过localhost/httpget进行查询。然后,Flask将结果传递回网络上的用户。我希望能够为用户提供将其查询作为.csv文件下载的能力(而不是在浏览器中查看并手动执行)。我还希望能够将csv转换为.xls格式,并允许作为另一个文件下载。有没有办法让flask缓存文件,并将其作为一个整体提供下载,扩展名为(.csv或.xls) 谢谢您的时间。看看这个: Solr不支持xls,但支持CSV。您可能需要让flask下载CSV输出

我将SOLR与Flask(python)包装器一起使用,该包装器通过localhost/httpget进行查询。然后,Flask将结果传递回网络上的用户。我希望能够为用户提供将其查询作为.csv文件下载的能力(而不是在浏览器中查看并手动执行)。我还希望能够将csv转换为.xls格式,并允许作为另一个文件下载。有没有办法让flask缓存文件,并将其作为一个整体提供下载,扩展名为(.csv或.xls)

谢谢您的时间。

看看这个:

Solr不支持xls,但支持CSV。您可能需要让flask下载CSV输出响应,请查看以下内容:

Solr不支持xls,但支持CSV。您可能需要让flask下载CSV输出响应,请查看以下内容:

Solr不支持xls,但支持CSV。您可能需要让flask下载CSV输出响应,请查看以下内容:


Solr不支持xls,但支持CSV。您可能需要让flask下载CSV输出响应

这是一个很有技巧的方法,但可以:

一旦我们知道了用户的查询,我们就点击SOLR获得numfind。(我找不到一个方法来计算,如果有更简单的方法,请告诉我?)

接下来,因为我知道头和结果总是匹配的,所以我只添加硬编码的头。(我将添加一种方法,以便在将来的某个日期从solr Pythonicaly获得它。)

然后,我们将用户查询从json更改为csv,在根据返回中为每个页面指定的行计算页面计数后,迭代查询结果,并构建最终的_csv返回

最后,我们将最终的_csv连同响应和适当的标题发送回用户,以便它作为文件下载弹出

    final_csv = """"""

    header = "service_name_and_version,_version_,run_name,baseline_value,added_on,site_id,metric_type,baseline_run_id,service_name,tag_name,url,service_version,change_in_value,id,run_id,run_value,page_id,cryptic_tag_name"

    nice_header = header.split(",")

    final_csv += str(nice_header)[1:-1]

    r = requests.get(solr_query)

    solr_return = r.json()

    length = solr_return["response"]["numFound"]
    #(n + d // 2) // d

    print length

    pages = ((length + return_count // 2) // return_count) + 1

    #print pages

    counter = 0
    cursor = 0


    csv_query = solr_query.replace("&wt=json", "&wt=csv&csv.header=false")

    while counter < pages:

        iter_query = csv_query + "&rows=" + str(return_count) + "&start=" + str(cursor)

        r = requests.get(iter_query)

        solr_return = r.text

        solr_docs = solr_return.split("\n")
        print solr_docs
        print len(solr_docs)

        for doc in solr_docs[:-1]:

            row = str(doc)

            split_row = row.split(",")

            final_csv += "\n" + str(split_row)[1:-1]


        counter += 1
        cursor += return_count

    response = make_response(final_csv)

    response.headers['Content-type'] = 'text/csv'

    response.headers["Content-Disposition"] = "attachment; filename={0}.csv".format(csv_name)

    return response
final\u csv=“”
header=“服务名称和版本、版本、运行名称、基线值、添加日期、站点id、度量值类型、基线值、运行id、服务名称、标记名称、url、服务版本、更改值、id、运行id、运行值、页面id、神秘标记名称”
nice_header=header.split(“,”)
最终的_csv+=str(尼斯_头)[1:-1]
r=requests.get(solr\u查询)
solr_return=r.json()
length=solr_return[“response”][“numFound”]
#(n+d//2)//d
打印长度
页面=((长度+返回次数//2)//返回次数)+1
#打印页
计数器=0
光标=0
csv\u query=solr\u query.replace(“&wt=json”,“&wt=csv&csv.header=false”)
而计数器<页:
iter\u query=csv\u query+“&rows=“+str(返回计数)+”&start=“+str(光标)
r=requests.get(iter\u查询)
solr_return=r.text
solr\u docs=solr\u return.split(“\n”)
打印solr_文档
打印透镜(solr_文档)
对于solr_文档中的文档[:-1]:
行=str(文件)
拆分\行=行。拆分(“,”)
最终csv+=“\n”+str(分割行)[1:-1]
计数器+=1
游标+=返回计数
响应=作出响应(最终csv)
response.headers['Content-type']='text/csv'
response.headers[“Content Disposition”]=“attachment;filename={0}.csv.”格式(csv\u name)
返回响应

这是一个黑客程序,但可以:

一旦我们知道了用户的查询,我们就点击SOLR获得numfind。(我找不到一个方法来计算,如果有更简单的方法,请告诉我?)

接下来,因为我知道头和结果总是匹配的,所以我只添加硬编码的头。(我将添加一种方法,以便在将来的某个日期从solr Pythonicaly获得它。)

然后,我们将用户查询从json更改为csv,在根据返回中为每个页面指定的行计算页面计数后,迭代查询结果,并构建最终的_csv返回

最后,我们将最终的_csv连同响应和适当的标题发送回用户,以便它作为文件下载弹出

    final_csv = """"""

    header = "service_name_and_version,_version_,run_name,baseline_value,added_on,site_id,metric_type,baseline_run_id,service_name,tag_name,url,service_version,change_in_value,id,run_id,run_value,page_id,cryptic_tag_name"

    nice_header = header.split(",")

    final_csv += str(nice_header)[1:-1]

    r = requests.get(solr_query)

    solr_return = r.json()

    length = solr_return["response"]["numFound"]
    #(n + d // 2) // d

    print length

    pages = ((length + return_count // 2) // return_count) + 1

    #print pages

    counter = 0
    cursor = 0


    csv_query = solr_query.replace("&wt=json", "&wt=csv&csv.header=false")

    while counter < pages:

        iter_query = csv_query + "&rows=" + str(return_count) + "&start=" + str(cursor)

        r = requests.get(iter_query)

        solr_return = r.text

        solr_docs = solr_return.split("\n")
        print solr_docs
        print len(solr_docs)

        for doc in solr_docs[:-1]:

            row = str(doc)

            split_row = row.split(",")

            final_csv += "\n" + str(split_row)[1:-1]


        counter += 1
        cursor += return_count

    response = make_response(final_csv)

    response.headers['Content-type'] = 'text/csv'

    response.headers["Content-Disposition"] = "attachment; filename={0}.csv".format(csv_name)

    return response
final\u csv=“”
header=“服务名称和版本、版本、运行名称、基线值、添加日期、站点id、度量值类型、基线值、运行id、服务名称、标记名称、url、服务版本、更改值、id、运行id、运行值、页面id、神秘标记名称”
nice_header=header.split(“,”)
最终的_csv+=str(尼斯_头)[1:-1]
r=requests.get(solr\u查询)
solr_return=r.json()
length=solr_return[“response”][“numFound”]
#(n+d//2)//d
打印长度
页面=((长度+返回次数//2)//返回次数)+1
#打印页
计数器=0
光标=0
csv\u query=solr\u query.replace(“&wt=json”,“&wt=csv&csv.header=false”)
而计数器<页:
iter\u query=csv\u query+“&rows=“+str(返回计数)+”&start=“+str(光标)
r=requests.get(iter\u查询)
solr_return=r.text
solr\u docs=solr\u return.split(“\n”)
打印solr_文档
打印透镜(solr_文档)
对于solr_文档中的文档[:-1]:
行=str(文件)
拆分\行=行。拆分(“,”)
最终csv+=“\n”+str(分割行)[1:-1]
计数器+=1
游标+=返回计数
响应=作出响应(最终csv)
response.headers['Content-type']='text/csv'
response.headers[“Content Disposition”]=“attachment;filename={0}.csv.”格式(csv\u name)
返回响应

这是一个黑客程序,但可以:

一旦我们知道了用户的查询,我们就点击SOLR获得numfind。(我找不到一个方法来计算,如果有更简单的方法,请告诉我?)

接下来,因为我知道头和结果总是匹配的,所以我只添加硬编码的头。(我将添加一种方法,以便在将来的某个日期从solr Pythonicaly获得它。)

然后,我们将用户查询从json更改为csv,在根据返回中为每个页面指定的行计算页面计数后,迭代查询结果,并构建最终的_csv返回

最后,我们将最终的_csv连同响应和适当的标题发送回用户,以便它作为文件下载弹出

    final_csv = """"""

    header = "service_name_and_version,_version_,run_name,baseline_value,added_on,site_id,metric_type,baseline_run_id,service_name,tag_name,url,service_version,change_in_value,id,run_id,run_value,page_id,cryptic_tag_name"

    nice_header = header.split(",")

    final_csv += str(nice_header)[1:-1]

    r = requests.get(solr_query)

    solr_return = r.json()

    length = solr_return["response"]["numFound"]
    #(n + d // 2) // d

    print length

    pages = ((length + return_count // 2) // return_count) + 1

    #print pages

    counter = 0
    cursor = 0


    csv_query = solr_query.replace("&wt=json", "&wt=csv&csv.header=false")

    while counter < pages:

        iter_query = csv_query + "&rows=" + str(return_count) + "&start=" + str(cursor)

        r = requests.get(iter_query)

        solr_return = r.text

        solr_docs = solr_return.split("\n")
        print solr_docs
        print len(solr_docs)

        for doc in solr_docs[:-1]:

            row = str(doc)

            split_row = row.split(",")

            final_csv += "\n" + str(split_row)[1:-1]


        counter += 1
        cursor += return_count

    response = make_response(final_csv)

    response.headers['Content-type'] = 'text/csv'

    response.headers["Content-Disposition"] = "attachment; filename={0}.csv".format(csv_name)

    return response