On Mon, Dec 15, 2008 at 11:07 PM, mdipierro <[email protected]> wrote:
>
> I added this in trunk as suggested (in a try except to avoid
> problems). Before I make this official I would like people to run a
> test
>
> db=SQLDB('.....')
> db.define_table('t',SQLField('a'))
> db.t.insert(a='test')
> print db(db.t.id>0).delete()
>
> does it output 1 on
>
> sqlite: YES
postgresql: YES
mysql: ?
> mssql: ?
> firebird: ?
> oracle: ?
>
> This is not yet implemented on GAE. If anybody knows how to, please
> send me a patch.
>
> Massimo
>
>
> On Dec 15, 6:29 pm, achipa <[email protected]> wrote:
> > Any particular reason why a shortcut to db._cursor.rowcount (or a
> > db.rowcount wrapper) is not goot enough ? I actually considered this
> > mod some time ago, but in the end I found it easier to use .rowcount,
> > as it is compatible with inserts (think 'insert into select') for
> > cases when you are branching between an update and an insert, or doing
> > an insert that results in multiple rows being inserted. Also, it's
> > potentially easier to learn/more reusable knowledge as it works the
> > same way as regular python.
> >
> > On Dec 16, 12:56 am, billf <[email protected]> wrote:
> >
> > > The Python API Spec v2.0 contains the following:
> >
> > > .rowcount
> >
> > > This read-only attribute specifies the number of rows that
> > > the last .execute*() produced (for DQL statements like
> > > 'select') or affected (for DML statements like 'update' or
> > > 'insert').
> >
> > > The attribute is -1 in case no .execute*() has been
> > > performed on the cursor or the rowcount of the last
> > > operation is cannot be determined by the interface. [7]
> >
> > > Note: Future versions of the DB API specification could
> > > redefine the latter case to have the object return None
> > > instead of -1.
> > > ...and, under Major changes from Version 1 to version 2...
> > > The definition of the .execute() return value changed.
> > > Previously, the return value was based on the SQL statement
> > > type (which was hard to implement right) -- it is undefined
> > > now; use the more flexible .rowcount attribute
> > > instead. Modules are free to return the old style return
> > > values, but these are no longer mandated by the
> > > specification and should be considered database interface
> > > dependent.
> >
> > > Consequently, I believe the change to sql.py update() and delete()
> > > methods should be to change
> >
> > > self._db._execute(query)
> >
> > > to
> >
> > > self._db._execute(query)
> > > return self._db._cursor.rowcount
> >
> > > I will test this with sqlite3 and mysql - can anyone with access to
> > > other db's confirm that rowcount is supported?
> >
> > > On Dec 15, 11:33 pm, billf <[email protected]> wrote:
> >
> > > > Ok - I will try to determine if there is a "standard" way to do this.
> > > > Can you tell me whether the drivers for the current supported
> > > > databases conform to any particular specification? Python Database
> > > > API Specification v2.0 seems the appropriate one but I'd like it
> > > > confirmed.
> >
> > > > On Dec 15, 7:17 pm, mdipierro <[email protected]> wrote:
> >
> > > > > I would very much like to include this but this has to work on all
> > > > > supported databases. Can you send me a patch? It will be included.
> >
> > > > > On Dec 15, 2:26 am, billf <[email protected]> wrote:
> >
> > > > > > I would like access to the rowcount returned from update and
> delete
> > > > > > actions. There are a couple of reasons:
> >
> > > > > > a) it could be used to detect rare errors, e.g. expect 1 row to
> be
> > > > > > updated and zero returned.
> >
> > > > > > b) if the update/delete affects several rows, I'd like to know
> how
> > > > > > many rows were updated without running a separate select, e.g.
> > > > > >
> rowcount=db(db.employee.role==request.vars.role).update(request.vars)
> >
> > > > > > I believe that this can be achieved quite simply by a patch to
> sql.py
> > > > > > update() and delete() methods.
> >
> > > > > > Change "self._db._execute(query)" to "return
> self._db._execute(query)"
> >
> > > > > > If you wanted to access "rowcount" with SQLFORM then other
> changes
> > > > > > would be required.
> >
> > > > > > My questions are:
> >
> > > > > > 1) can anyone see a problem with the suggestion?
> >
> > > > > > 2) does anyone object to including the proposed patch?
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---