[DB-SIG] Re: oracle db module status

Greg Stein gstein@lyra.org
Thu, 03 Dec 1998 18:46:44 -0800


If that is the behavior, then the modules are *wrong*.  fetchall()
should return *all* the rows, memory-be-damned. The fetchall() method
was specified at the request of a number of users; Joel Shprentz was the
specific motivator, as I recall -- he had some excellent arguments for
its inclusion.

Further, fetchmany() should return the number that you request. Any
fewer, and that means that there aren't any more (much like a read()).

If any module does not obey those rules, then I'd question their
compliance to the DBAPI.

-g

Ronald Hiller wrote:
> 
> I had the same experience as you in that fetchmany() returns a single row
> from a large table.
> 
> It appears that there is a limit on the number of things returned by the
> fetchmany() call (it is set to 1000 in Anthony Baxter's version).  This
> still doesn't explain all of the behavior I see, but it helps!
> 
> Anyways, one solution is:
> def myfetchmany(cursor):
>         res = []
>         while 1:
>                 r = cursor.fetchone()
>                 if not r: break
>                 res.append(r)
>         return res
> 
> A look back at the Digicool freebie module shows it always fetches one row
> at a time so this will be no worse.
> 
> I had some problems with the Digicool freebie module with core dumps and
> infinite loops (always in the cleanup when Python was cleaning up to exit).
> 
> Ron
> ==========================================================
> Ronald Hiller                     Graburn Technology, Inc.
> Phone: (732) 845-3999             Suite 250
> FAX:   (732) 446-6835             716 Newman Springs Road
> email: ron@graburn.com            Lincroft, NJ 07738
> ==========================================================
> 
> >[cross-posted to DB-SIG, in case someone there cares. I don't subscribe to
> >DB-SIG though, so please CC me any relevant followups]
> >
> >[Aaron_Watters@my-dejanews.com]
> >>   richard.jones@fulcrum.com.au wrote:
> >> >     I need an interface to Oracle 8, and am finding that most of the
> oracle
> >> > modules out there (except the Digicool one, but I don't have the
> option of
> >> > paying for it) are a little out of date with respect to Oracle 8.
> >>
> >> I've used the oracledb module (the freebie) from digicool
> >> with oracle 8, and after the horrible fight to get it linked
> >> it seemed to work without a problem.  I also know someone
> >> who is using Anthony Baxter's version and it seems to work
> >> good for him.
> >
> >    Well, to expand a little on the post I made... I have Anthony Baxter's
> >oracledb module linked fine with 8.0.5 now. I patched the Makefile to
> include
> >${ORACLE_HOME}/rdbms/lib/env_rdbms.mk and then linked with ${TTLIBS}. My
> >problem was that my test select wasn't working properly. After investigating
> >further, I find that a "select * from tab" only returns a row at a time when
> >fetchall()'ed, but a regular table that I make will return all rows on a
> >fetchall(). This is all a bit dodgy, and may result in the killing of Python
> >from the project I'm working on.
> >
> >   Now for the icky bit... looking in the 8.0.4 documentation for OCI, I
> find
> >that all the functions used in oracledb are now deprecated. *sigh*
> >
> >
> >> Conceivably (dunno) it should be possible to
> >> use M.A.Lemburg's mxODBC or (on win32) Bill Tutt's odbc module
> >> or, if you diverge from Greg Stein's dbapi, Sam Rushing's
> >> more direct odbc binding too on win32.  Dunno if this helps.
> >> It's all very confusing.
> >
> >    ODBC isn't an option, unfortunately.
> >
> >
> >> The problem with diversity is it's so diverse, when all
> >> you wanna do is get the job done!  I think I posted a makefile
> >> for oracle8/oracledbmodule to the dbsig many months ago.
> >
> >    Well, here's the snippet that works for me: this is the last few lines
> of
> >the Makefile...
> >
> >include ${ORACLE_HOME}/rdbms/lib/env_rdbms.mk
> >oradbmodule.o: $(srcdir)/oradbmodule.c; $(CC) $(CCSHARED) $(CFLAGS)  -I.
> -I. -c
> >$(srcdir)/oradbmodule.c
> >dbi.o: $(srcdir)/dbi.c; $(CC) $(CCSHARED) $(CFLAGS)  -I. -I. -c
> $(srcdir)/dbi.c
> >oracledbmodule$(SO):  oradbmodule.o dbi.o; $(LDSHARED)  oradbmodule.o
> dbi.o  -L$
> >{ORACLE_HOME}/lib ${TTLIBS} -lsocket -lgen -ldl -lc -laio -lm -o
> oracledbmodule$
> >(SO)
> >
> >    (Note that the oradbmodule.o, dbi.o and oracledbmodule$(SO) lines
> should be
> >1 line - but my mail program might break them)
> >
> >
> >
> >       Richard
> >
> >--
> >Richard Jones,  developer for the Fulcrum Consulting Group.   (03) 9621 2100
> >http://www.fulcrum.com.au/         http://alumni.dgs.monash.edu.au/~richard/
> >
> 
> _______________________________________________
> DB-SIG maillist  -  DB-SIG@python.org
> http://www.python.org/mailman/listinfo/db-sig

--
Greg Stein, http://www.lyra.org/