Python-Flask异常:意外的数据类型<type'unicode'=“”>,<type'list'=“”>

时间:2018-07-10 11:23:59

标签: python firebase flask

嗨,我正在尝试从下面提到的代码中下载一个excel文件,我正在从firebase数据库中查询数据。 但是,当我尝试运行此代码时,它给了我Unicode异常。 谁能帮我解决这个问题? 预先感谢。

@mod_drprax_backend.route('/download-excel/', methods=['GET'])
def export_db():

    array = []
    args = get_query_args(request)
    ref = db.collection(u'Providers')
    providersList, total = firebase_admin_query_helper(ref, args)
    pro = providersList[0]

    collect = zip(pro.keys(), pro.values())

    for data in collect:
        providerDetails = [data]
        array.append(providerDetails)

    return excel.make_response_from_array([array],"xls",file_name=u"excel_doc" )

1 个答案:

答案 0 :(得分:0)

根据您提供的代码,您不遵守类型合同。由于zip(..)返回一个元组列表(此处为2元组),因此这意味着data循环中的for实际上是2元组(显然是(unicode, list)) 。您不能将其提供给excel导出。

因此,您需要进行一些线性化。例如:

@mod_drprax_backend.route('/download-excel/', methods=['GET'])
def export_db():
    array = []
    args = get_query_args(request)
    ref = db.collection(u'Providers')
    providersList, total = firebase_admin_query_helper(ref, args)
    pro = providersList[0]

    for ky, vls in pro.items():
        for vl in vls:
            for subky, subvl in vl.items():
                providerDetails = [ky, subky, subvl]
        array.append(providerDetails)

        return excel.make_response_from_array([array],"xls",file_name=u"excel_doc" )

请注意,如果pro是字典,则可以改用.items(),我们还可以使用列表理解:

@mod_drprax_backend.route('/download-excel/', methods=['GET'])
def export_db():
    args = get_query_args(request)
    ref = db.collection(u'Providers')
    providersList, total = firebase_admin_query_helper(ref, args)
    pro = providersList[0]

    array = [
        [ky, subky, subvl]
        for ky, vls in pro.items()
        for vl in vls
        for subky, subvl in vl.items()
    ]

    return excel.make_response_from_array([array],"xls",file_name=u"excel_doc" )