Thanks a lot Simon. I am using Pylons, but response.body actually worked. I can get my xls file alright now.
Thanks for all your help! On Wednesday, February 27, 2013 11:40:22 AM UTC, Simon King wrote: > > On Tue, Feb 26, 2013 at 2:44 PM, dalia <dali...@gmail.com <javascript:>> > wrote: > > Hi, > > > > My intention is - to store .xls, .doc and .pdf files (with images in > them) > > to store in a Oracle database and retrieve them. I'm using SQLAlchemy > > declarative code. The problem is, the data gets stored in the database > but > > when I try to fetch the data back, it comes out as 0KB. I'm explaining > the > > code and actions below - > > > > The model - > > > > class ReportFiles(Base): > > __tablename__ = 'report_files' > > id = Column(Integer, primary_key=True) > > report_file = Column(BLOB) > > file_name = Column(Unicode(50)) > > > > > > Storing in database - > > > > content = cStringIO.StringIO() > > def store_in_db(): > > session = meta.Session() > > self._get_file(content) ### This is a function which generates > the > > file (.xls / .doc / .pdf) in the content > > contentstr = content.getvalue() > > tbl = model.ReportFiles() > > tbl.file_name = "test file" > > tbl.report_file = contentstr > > session.add(tbl) > > session.commit() > > > > After the store, if I query the database, I get this result - not sure > if it > > has stored alright - > > > > select file_name, length(report_file) from report_files; > > > > Name | Length > > -------------------------- > > test file | 5632 > > > > select file_name, report_file from report_files; > > > > Name | file > > ------------------ > > test file | (BLOB) > > > > This doesn't look right because instead of the file, it just shows > (BLOB) > > > > Retrieving from database - now I want the file to be downloaded as an > excel > > (.xls) file > > > > def _get_report(self): > > tbl = model.ReportFiles > > file = meta.Session.query(tbl).get(id=1) > > contentstr = file.report_file > > response.content_type = 'application/vnd.ms-excel; charset=utf-8' > > response.headers['Content-disposition'] = 'attachment; filename = %s' > > %file.file_name > > response.content_length = len(contentstr) > > print "Length = %s" %len(contentstr) > > return contentstr > > > > > > This downloads the .xls file fine. The print statement prints the file > size > > as 5632. The download dialogue says the file size is 5.5KB. But when I > open > > the file, it says 'file type not in right format'. When I open it in > > notepad, it is a 0 KB file. When I list the file in the directory, it is > a > > 0KB file. > > > > Can somebody please tell me what is wrong here? Looks like the file > doesn't > > get stored properly? Or am I missing something obvious? Or do I need to > > handle BLOB types differently? > > > > I don't know what web framework you are using, but in pyramid I think > you would set the "response.body" attribute to your contentstr, rather > than returning it. Does that make any difference? > > Simon > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy?hl=en. For more options, visit https://groups.google.com/groups/opt_out.