Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中使用pandas将模型查询的结果转换为xlsx?_Python_Sql_Django_Excel_Pandas - Fatal编程技术网

如何在python中使用pandas将模型查询的结果转换为xlsx?

如何在python中使用pandas将模型查询的结果转换为xlsx?,python,sql,django,excel,pandas,Python,Sql,Django,Excel,Pandas,在我的项目中,我有一个standart model的收藏,如下所示: class Dimension(models.Model): dimension_id = MyCharField(max_length=1024, primary_key=True) name = MyCharField(max_length=255, null = False, unique=True) external_flg = models.BooleanField(default = Fa

在我的项目中,我有一个standart model的收藏,如下所示:

class Dimension(models.Model):
    dimension_id = MyCharField(max_length=1024, primary_key=True)
    name = MyCharField(max_length=255, null = False, unique=True)
    external_flg =  models.BooleanField(default = False)
    ext_owner = MyCharField(max_length=30, null = True)
    ext_table_name = MyCharField(max_length=30, null = True)
    ext_start_date_column_name = MyCharField(max_length=30, null = True)
    ext_end_date_column_name = MyCharField(max_length=30, null = True)
    ext_id_column_name = MyCharField(max_length=30, null = True)
    ext_name_column_name = MyCharField(max_length=30, null = True)
    ext_where_codition = MyCharField(max_length=512, null = True)
    def save(self):
        cnt =self.__class__.objects.filter(name=self.name).count()
        if cnt==0:
            if self.pk:
                super(Dimension, self).save()
            else:
                self.dimension_id = getUid()
                super(Dimension, self).save()
        else:
            raise DimensionUniqueError(self.name)
现在,我必须实现一个按钮,将数据从我们的模型导入xlsx文件,并在客户端自动下载

我们计划使用pandas进行sql到xlsx的转换,但我不知道如何实现与pandas的交互。目前,我是这样实现的:

import pandas as ps

class Excel:
    def __init__(self, model_name):
        self.model_name = model_name
    def sql_to_xlsx():
        elements = self.model_name.objects.all()
        filter = self.request.GET.get('filter', None)

        if filter is not None:
            elements = elements.filter(filter_field=filter)
            columns = [desc[0] for desc in elements]
            data = [desc[1:] for desc in elements]
            df = ps.DataFrame(list(data), columns)
            writer = ps.ExcelWriter('converted.xlsx')
            df.to_excel(writer, sheet_name='converted')
            return writer.save()

    def get(self, request, *args, **kwargs):
        document = self.sql_to_xlsx()
        _file = open(document.filename, 'r')

        response = HttpResponse(_file, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        response['Content-Disposition'] = 'attachment; filename=%s' % document.filename.split('/')[-1]  # Here will return a full path, that's why probably you will need a split to get only the filename
        add_never_cache_headers(response=response)  # To avoid download the same file with out of date data.
        return response
但这不是我所期望的正确逻辑。我觉得这样做是不对的

你能帮我试试如何为我们的模型实现所需的逻辑吗?
谢谢大家!

我认为你不需要写excel

我会用它来写excel。仅仅按照他们页面上的例子就足够了。您只需在模型中循环,并使用openpyxl写入所需的特定行和列