Dear All, Thanks for your answers.But what I was looking for was,putting into simple words,implementing a use case similar to the following "The system maintains the data related to each transaction.Each transaction includes the list of items demanded per transaction with each item belonging to a category.The system also generates an aggregated report per transaction as well as an overall report of the total items belonging to each category demanded.".Now "the report" here need not be in csv only.It may be txt file.Since I am not sure as to whether is it possible to print formatted strings(e.g. the string "report" printed right aligned in a total field of 15 characters,something likd printf(%15s)) in web2py,my question is that how we do file IO in web2py. Can we generate a txt file in web2py. And can we print formatted strings to it? Since the controller runs on server and my application would be deployed in an intranet lan and it needs to generate files to be used in local file system of the system on which the user will access the app , where must this file IO code be written, in controller or view.
On 30 April 2012 07:35, Brian M <bmere...@gmail.com> wrote: > Yep, I've got a processing app that spits out all sorts of csv files based > on data gathered from multiple sources. > > Here's a little helper function I use > > def csv_export(records, column_names, fields, mode = 'dal'): > """Export DAL result set, list of dicts or list of lists to CSV stream > for returning to user > Arguments: > records = the data to be returned > column_names (list)= the column names/headings for the first row in > the CSV file > Example ['First Name', 'Last Name', 'Email'] > fields (list) = the names of the fields (as they appear in records) in > the order they > should be in the CSV. Example ['f_name', 'l_name', > 'email'] > or ['table_a.f_name', 'table_a.l_name', > 'table_b.email'] > If mode = 'list' and your records are in the correct > order then fields may be None > otherwise use [1,3,0] if you list is in a different > order > mode (string) = what type of data is in records? 'dal' (Default), > 'dict' or 'list' > 'dal' if records came from a regular dal query > (Default) > 'dict' if records are a list of dicts (for example > using db.executesql() with as_dict = True) > 'list' if records are a list of lists/tuples (for > example using db.executesql() with as_dict = False) > > """ > > #create fake file object > import cStringIO > file = cStringIO.StringIO() > #setup csv writer > import csv > csv_file = csv.writer(file) > #write first row withspecified column headings/names > csv_file.writerow(column_names) > #which mode - dal or dict? > if mode.lower() == 'dal' or mode.lower() == 'dict': > for record in records: > csv_file.writerow([record[field] for field in fields]) > elif mode.lower() == 'list': > if fields == None: > csv_file.writerows(records) > else: > for record in records: > csv_file.writerow([record[field] for field in fields]) > return file > > > > Then in a controller you can have something like > > csv_stream = csv_export(processed_dataset, column_names, fields, mode > = 'dict') > response.headers['Content-Type']='application/vnd.ms-excel' > response.headers['Content-Disposition']='attachment; > filename=data_for_%s.csv' % date.today() > return csv_stream.getvalue() > > which will cause browser to download the csv file with your chosen filename > > you could also turn around and save the datafile to the filesystem if you > wanted. > > Hope this helps! > Brian > > > On Saturday, April 28, 2012 5:20:15 AM UTC-5, rahulserver wrote: >> >> I wish to generate a few reports in csv or txt or other file formats >> based on some database data maintained through a crud application. >> Previously, it was done through an asp.net application with vb as >> scripting language.But as I explored the wonderful capabilities of web2py, >> I have become a fan of this terrific framework. >> Is it possible to do it in web2py. And if it is, then how and where >> should the code be placed.In the view or model or controller? >> >