一个简单的python模块,用于将queryset写入csv

django-queryset-csv的Python项目详细描述


https://travis-ci.org/azavea/django-queryset-csv.pnghttps://coveralls.io/repos/azavea/django-queryset-csv/badge.svg?branch=master&service=githubhttps://img.shields.io/pypi/v/django-queryset-csv.svg

Django QuerySets的CSV导出程序。

此工具是在Django中重复执行以下操作后创建的:

  1. 编写基于简单查询集的csv数据。
  2. 自动将Unicode字符编码为UTF-8
  3. 创建快捷方式以将queryset呈现为csv http响应
  4. 向csv文件名添加时间/日期戳机制

有关更详细的文档,请阅读this blog post.

安装

运行:

pip install django-queryset-csv

支持Python2.7和3.5,django>;=1.8。

用法

使用.filter().values()执行视图中的所有筛选和字段授权。 然后,使用render_to_csv_response将queryset转换为带有csv附件的响应。 传递一个QuerySetValuesQuerySet实例:

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_responsewrite_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文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何运行一个在播放歌曲的同时创建和更改UI的方法?   eclipse错误:无法找到或加载主类Java,因为类文件anme和类名不同?   两个数字相加得到一个值的java算法   java我可以更改字符串吗?   java Hibernate 5.2:以编程方式从其他jar加载映射   java如何访问随机跳转到固定位置的二进制文件   java是解析器实现中文档的功能   Javasocket的两端齐平   java查找将两个非常大的整数之和除以相等块的步骤   java如何在Restlet中调用带超时的异步HTTP客户端   java如何从servlet请求将hashmap传递给jsp。塞塔提布特   java Spring MVC HTTP状态500–内部服务器错误,Servlet。servlet[dispatcher]的init()引发异常   java即使没有alpha通道,如何将PNGFiles加载为ARGB_8888?   java将subscribe的返回类型映射到其他类型   javascript如何在安卓 WebView中启用longpress操作下载图像?   java将字符串作为hashmap值的一部分添加到StringList中   JavaSpringAOP:代表类型声明其他方法或字段   Java将二进制序列转换为字符   java使用ApachePOI获取最后一行值   为什么要在FPS(每秒帧数)跟踪器中添加时间?(爪哇)