So what is your advice, to run with your mod in sqlhtml.py for the
time being...?

Btw, my other issue with 1.56.1 turns out not to be mysql-related.
The following function is passed as a validator to my SQLFORM
(slightly simplified):
    def myvalidator(form):
        for f in fields:
            if form.vars[f] =='': form.errors[f]='error'

    form=SQLFORM(db.t2_person,pers,fields=fields)

    if form.accepts(request.vars, session, onvalidation=lambda form:
myvalidator(form)):

It appears that pre-1.56 the "fields" list in the onvalidation call
included only the fields array as passed to SQLFORM, and in 1.56 it
includes all fields in the database table? Is that possible? At any
rate, I can repair this by explicitly specifying the fields to be
validated in the validator function.

Cheers,
-Peter


On Feb 8, 6:39 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
> I think the problem is that in mysql
>
> db(...).update(..)
> db(...).delete()
>
> do not seem to return the number of affected records....
>
> Massimo
>
> On Feb 8, 11:27 am, Peter <peter.kleyn...@gmail.com> wrote:
>
> > Hi Massimo,
>
> > The printed values are " '9' 9L " in both cases.
>
> > Your first suggestion is ineffective,
> > but the second one solves this problem:
> >    self.table._db(self.table.id==self.record.id).update(**fields)
>
> > I have another issue that seems to be mysql related, I'll post this
> > separately.
>
> > -Peter
>
> > On Feb 8, 5:22 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > I am puzzled. Can you help me debug this?
>
> > > Can you replace in sqlhtml.py
>
> > >                     self.table[record_id] = fields
>
> > > with
> > >                     print repr(record_id), repr(self.record.id)
> > >                     self.table[self.record.id] = fields
>
> > > and if it still does not work with
>
> > >                     print repr(record_id), repr(self.record.id)
> > >                     self.table._db
> > > (self.table.id==self.record.id).update(**fields)
>
> > > Let me know what happens.
>
> > > Massimo
>
> > > On Feb 8, 7:23 am, Peter <peter.kleyn...@gmail.com> wrote:
>
> > > > Until now I was running trunk r660 with MySQL with few problems. With
> > > > 1.56.1 a few new issues popped up. Code below works OK with 1.56.1 and
> > > > sqlite, but not with MySQL. Sessions are on the file system (default
> > > > settings), not in the DB.
>
> > > > If I submit the form without making any changes to it, I get a "no
> > > > such record" error from sql.py (see error msg below). If I DO make any
> > > > trivial change to field values in the form, it submits OK and is
> > > > stored in the database. If I pass t2.person_id to SQLFORM instead of
> > > > 'pers' , the result is the same.
>
> > > > Could this be some dependency on the old t2 module I still use?
> > > > Cheers,
> > > > -Peter
>
> > > > # default.py:
> > > > def testmysql():
> > > >     pers = db(db.t2_person.id==t2.person_id).select()[0]
> > > >     form = SQLFORM(db.t2_person,pers)
> > > >     if form.accepts(request.vars,session):
> > > >         redirect(URL(r=request,f='index'))
> > > >     return dict(form=form)
>
> > > > # db.py:
> > > > db.define_table('t2_person',
> > > >     SQLField('name',length=40,label='MoemID',requires=IS_NOT_EMPTY
> > > > (),unique=True),
> > > >     SQLField('password','password',requires=CRYPT()),
> > > >     SQLField('email',requires=IS_EMAIL()),
> > > >     SQLField('registration_key',length=64),
> > > >     SQLField('voornaam',default=''),
> > > >     SQLField('achternaam',default='',length=50),
> > > >     SQLField('adres',length=100,label='Straat en huisnr',default=''),
> > > >     SQLField('postcode',length=10,default=''),
> > > >     SQLField('plaats',length=50,default=''),
> > > >     SQLField('land',requires=IS_IN_SET
> > > > ( COUNTRIES ),default='Nederland' ),
> > > >     SQLField('telnr',length=20,label=T('06-nummer'),default=''),
> > > >     SQLField('foto','upload',default=''),
> > > >     SQLField('wiebenik','text',label='Over jou', default=''),
> > > >     SQLField('created_by_ip',default='10.0.0.1'),
> > > >     SQLField('created_on','datetime',default="1900-01-01 00:00:00"))
> > > > # validation business rules and widgets all disabled for this test
>
> > > > # error message:
> > > > Traceback (most recent call last):
> > > >   File "/Library/Python/2.5/site-packages/web2py-1.56.1/gluon/
> > > > restricted.py", line 98, in restricted
> > > >     exec ccode in environment
> > > >   File "/Library/Python/2.5/site-packages/web2py-1.56.1/applications/
> > > > mijnmoem/controllers/default.py", line 296, in <module>
> > > >   File "/Library/Python/2.5/site-packages/web2py-1.56.1/gluon/
> > > > globals.py", line 74, in <lambda>
> > > >     self._caller = lambda f: f()
> > > >   File "/Applications/web2py.app/Contents/Resources/applications/
> > > > mijnmoem/modules/t2.py", line 1039, in h
> > > >     return f(*a,**b)
> > > >   File "/Library/Python/2.5/site-packages/web2py-1.56.1/applications/
> > > > mijnmoem/controllers/default.py", line 79, in testmysql
> > > >     if form.accepts(request.vars,session):
> > > >   File "/Library/Python/2.5/site-packages/web2py-1.56.1/gluon/
> > > > sqlhtml.py", line 529, in accepts
> > > >     self.table[record_id] = fields
> > > >   File "/Library/Python/2.5/site-packages/web2py-1.56.1/gluon/sql.py",
> > > > line 982, in __setitem__
> > > >     raise SyntaxError, 'No such record'
> > > > SyntaxError: No such record
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to