Django或Python中的数据库报告服务

7 投票
2 回答
8242 浏览
提问于 2025-04-15 11:16

我在想有没有基于Django或者Python的报告服务,类似于JasperReports或者SQL Server Reporting Services?

简单来说,我希望能创建报告,然后把它们以CSV、HTML或PDF的形式发出去,不想自己写代码来做报告。即使需要写一点代码我也不介意,但如果有一个完整的框架,能安排时间表什么的,那就更好了!

附言:我知道可以用Django的应用来实现这个,但我希望能找到一些集成的解决方案,或者像Pinax或Satchmo这样的项目,把需要的应用都整合在一起。

再附言:这个系统必须能在Postgres上运行。

2 个回答

4

“我希望能创建报告……而不需要编写代码。”

我也是。不过可惜的是,每个报告似乎都是独一无二的,都需要一些特别的代码。

从Django模型导出到CSV文件其实很简单。你可以从这里开始,先做几个报告。

import csv
from myApp.models import This, That, TheOther
def parseCommandLine():
    # setup optparse to get report query parameters
def main():
    wtr= csv.DictWriter( sys.stdout, ["Col1", "Col2", "Col3"] )
    this, that = parseCommandLine()
    thisList= This.objects.filter( name=this, that__name=that )
    for object in thisList:
        write.writerow( object.col1, object.that.col2, object.theOther.col3 )
if __name__ == "__main__":
    main()

HTML也挺简单的——Django有自己的HTML模板语言。你不需要使用render_to_response,而是直接渲染你的模板,然后把它写到标准输出。很有趣的是,生成报告的核心算法和写CSV文件的方式非常相似。其实只要稍微动动脑筋,你就能设计出一个同时能处理这两种格式的模式。

一旦你把CSV文件搞定了,就可以用Django的模板来添加HTML部分。

生成PDF文件就比较麻烦,因为你需要仔细考虑格式问题。不过有很多Python库可以帮助你处理这个。值得注意的是,写PDF的整体思路和写CSV、HTML是非常相似的。

发送邮件则需要直接使用Python的smtplib库或者Django的邮件包。这并不难。所有的组件都已经准备好了,你只需要把上面生成的输出文件发送到一个邮件列表中。

安排定时任务需要一些思考,以便更好地利用crontab。这可能是这个工作的最难部分。

3

我经过一番调查,觉得有必要把我的发现分享一下……

http://code.google.com/p/django-reporting/ - 我觉得这个项目非常适合我需要的很多功能。不过可惜的是,它是基于Django 1.1的,而截至我写这段话(2009年4月29日),这个版本还没有发布。至少在创建报告时,不需要写太多代码。

http://code.google.com/p/django-cron/ - 这个看起来很有前景,可以用来安排任务,而不需要访问cron。

http://www.xhtml2pdf.com/ - 这个可以用来将HTML转换成PDF,或者使用ReportLabs的PDF库。

把这些功能结合起来,再加上Django的邮件功能,可以做出一个不错的报告系统。

撰写回答