[DB-SIG] Re: oracle db module status

Ronald Hiller ron@graburn.com
Thu, 03 Dec 1998 21:37:00 -0500


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/
>