如何在python中使用pandas将模型查询的结果转换为xlsx?
在我的项目中,我有一个standart model的收藏,如下所示:如何在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
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写入所需的特定行和列