一个简单的python模块,用于将queryset写入csv
django-queryset-csv的Python项目详细描述
Django QuerySets的CSV导出程序。
此工具是在Django中重复执行以下操作后创建的:
- 编写基于简单查询集的csv数据。
- 自动将Unicode字符编码为UTF-8
- 创建快捷方式以将queryset呈现为csv http响应
- 向csv文件名添加时间/日期戳机制
有关更详细的文档,请阅读this blog post.
安装
运行:
pip install django-queryset-csv
支持Python2.7和3.5,django>;=1.8。
用法
使用.filter()和.values()执行视图中的所有筛选和字段授权。 然后,使用render_to_csv_response将queryset转换为带有csv附件的响应。 传递一个QuerySet或ValuesQuerySet实例:
from djqscsv import render_to_csv_response def csv_view(request): qs = Foo.objects.filter(bar=True).values('id', 'bar') return render_to_csv_response(qs)
如果需要将csv写入文件,可以使用write_csv代替:
from djqscsv import write_csv qs = Foo.objects.filter(bar=True).values('id', 'bar') with open('foo.csv', 'wb') as csv_file: write_csv(qs, csv_file)
外键
在django中使用ValuesQuerySet本机支持外键。只需使用__技术,就像在django orm中将参数传递给.values()方法时那样。
型号.py:
from django.db import models class Food(models.Model): name = models.CharField(max_length=20) class Person(models.Model): name = models.CharField(max_length=20) favorite_food = models.ForeignKey(Food)
视图.py:
from djqscsv import render_to_csv_response def csv_view(request): people = Person.objects.values('name', 'favorite_food__name') return render_to_csv_response(people)
关键字参数
此模块导出两个编写csv的函数render_to_csv_response和write_csv。如上文所述,这两个函数都需要自己的位置参数。此外,它们都采用以下可选关键字参数:
- field_header_map-(默认值:None)一个字典,将模型字段的名称映射到列标题名称。如果指定,CSV编写器将使用这些列标题。否则,它将使用defer to other参数来呈现列名。
- field_serializer_map-(默认值:{})一个字典,将模型字段的名称映射到将其序列化为文本的函数。例如,{'created': (lambda x: x.strftime('%Y/%m/%d')) }将序列化名为created的日期时间字段。
- use_verbose_names-(默认值:True)一个布尔值,用于确定是使用django字段的verbose_name,还是将其常规字段名用作列标题。请注意,如果在field_header_map中找到给定的字段,则该值将采用precendence。
- field_order-(默认值:None)用于确定排序顺序的字段列表。此列表不必完整:未指定的任何字段都将按照它们在其他情况下的使用顺序跟随列表中的字段。
除了上述参数之外,render_to_csv_response还接受以下可选关键字参数:
- filename-(默认值:None)一个字符串,用于在Content-Disposition头中设置文件名,作为返回的HttpResponse的一部分。如果不传递,将根据queryset的表名自动生成文件名。
- append_datestamp-(默认值:False)一个布尔值,用于确定是否将时间戳作为Content-Disposition头中文件名集的一部分追加。
- streaming-(默认值:True)一个布尔值,决定是否使用StreamingHttpResponse而不是普通的HttpResponse。
其余的关键字参数是通过传递给csv编写器的。例如,可以使用不同的分隔符导出CSV。
视图.py:
from djqscsv import render_to_csv_response def csv_view(request): people = Person.objects.values('name', 'favorite_food__name') return render_to_csv_response(people, delimiter='|')
有关可能参数的详细信息,请参阅DictWriter上的文档。
发展和贡献
请阅读包含的CONTRIBUTING.rst文件。