[DB-SIG] DCOracle2 excepting after execute

Kancianic, Jennifer C. (JKANCIAN) JKANCIAN at arinc.com
Thu Jun 12 11:04:14 EDT 2003


Yes - thanks - we use Oracle 8.1.7.

Here is some more code.  This updates the timestamp on a session key
generated by webkit:

def updateLastAccessed(self, key):
        try:
            sql = '''UPDATE sessions SET last_accessed = SYSDATE WHERE id =
:1'''
            results = self.db.doSQL(sql, (key, ))                   
            self.db.commit()
        except:
            self.log.exception("updateLastAccessed failed for session key "
+ key)

def doSQL(self, sqlStatement, list=(), noPrefetch=FALSE):
        """Inserts into the database with the given SQL statement if
        select flag == 0, othwerwise, performs the given select
        statement"""
        sqlStatement = sqlStatement.strip()

        try:
            if (not sqlStatement.upper().startswith('SELECT')):
                self.connect()
               
                if (len(list) > 0) and (type(list[0]) == type((1, 2))):
                    return self.cursor.executemany(sqlStatement, list)
            
                self.cursor.execute(sqlStatement, list)

            if sqlStatement.upper().startswith('SELECT'):
                newconn = self._pool.getConnection()
                cursor = newconn.cursor()
                if (noPrefetch):
                    cursor.setPrefetch(None)
		    # DB-SIG - This next statement is where the problem
                cursor.execute(sqlStatement, list)
                returnVal = (self.fetchrows(cursor) or [])
                cursor.close()
                self._pool.returnConnection(newconn)
                return returnVal

        except DCOracle2.Error, e:
            if sqlStatement.upper().startswith('SELECT'):
                try:
                    self.disconnect()
                except:
                    pass
            self.handleError(sqlStatement, str(e))

When I execute the update statement at the sqlplus command line, it tells me
that one row is updated.  I have thus far been unable to make the problem
happen in our development and test environments.  It happens in production
regularly (not EVERY time).  In particular, there are three different
update/insert scenarios where it happens more often.

Thanks,
Jenny

-----Original Message-----
From: Andy Todd [mailto:andy47 at halfcooked.com]
Sent: Thursday, June 12, 2003 4:51 AM
To: Kancianic, Jennifer C. (JKANCIAN)
Cc: 'db-sig at python.org'
Subject: Re: [DB-SIG] DCOracle2 excepting after execute


Kancianic, Jennifer C. (JKANCIAN) wrote:

> Sometimes, when our code executes an update or insert statement, DCOracle2
> will except unexpectedly.  Here is the traceback from our logfile:
> 
> Traceback (most recent call last):
>   File "/home/adc/adc/lib/UserDB.py", line 414, in updateLastAccessed
>     results = self.db.doSQL(sql, (key, ))
>   File "/home/adc/adc/lib/OracleDB.py", line 111, in doSQL
>     self.cursor.execute(sqlStatement, list)
>   File "/usr/local/lib/python2.2/site-packages/DCOracle2/DCOracle2.py",
line
> 1008, in execute
>     self.rowcount = self._cursor.rowcount()
> AttributeError: 'NoneType' object has no attribute 'rowcount'
> 
> This appears to be occurring in the DCOracle2 code that tries to get the
> number of rows affected after the execution.
> 
>         result = self._cursor.execute()
>         if result in RowCountResults:
>             self.rowcount = self._cursor.rowcount()
>         else:
>             self.rowcount = -1
> 
> Has anyone encountered this?  What can I do anything to NOT get the
> exception?  This is happening regularly and is not good.
> 
> If this was designed this way, how should I deal with it?  Forgive my
> ignorance.
> 
> I am using Oracle 1.8, Linux Redhat 7.1, python 2.2, DCOracle 1.3 (I
think).
> 
> Thanks for your help,
> Jenny
> 
> _______________________________________________
> DB-SIG maillist  -  DB-SIG at python.org
> http://mail.python.org/mailman/listinfo/db-sig

It possibly is a bug, but it is a little hard to tell without looking at 
all of the code. Can you produce a nice simple example that causes the 
same exception to be raised? Or can you strip the SQL from the your 
example and tell us what happens when you run it in SQL*Plus?

I haven't come across a situation where a DCOracle2 cursor object 
doesn't have a rowcount attribute, but that may just be me. Also, are 
you sure about the versions of the software you are using? Oracle 
doesn't currently ship a version 1.8, is it perhaps 8.1?

Regards,
Andy
-- 
----------------------------------------------------------------------------
----
 From the desk of Andrew J Todd esq - http://www.halfcooked.com/



More information about the DB-SIG mailing list