[sqlalchemy] Re: Handling unique constraints

2008-01-05 Thread sdobrev

Matt Haggard wrote:
 I'm using SQLAlchemy with Pylons and am having trouble validating
 data.  I have an App object mapped to a table with a unique constraint
 on App.number.
 
 Here's some code:
 
 q = Session.query(App)
 if app_id:
 q = q.filter_by(id=app_id).first()
 if q:
 c.app = q
 number = request.params.get('number')
 notes = request.params.get('notes')
 if appmodel and number:
 try:
 q.number = number
 q.notes = notes
 Session.save(q)
 Session.commit()
 c.message = 'Record updated'
 except:
 # restore pre-form data ?? how??
 c.message = 'Error updating record'
 return render('index.mtl')
 else:
 return self.index()
 
 My questions are:
 
 1) When I do the try statement, the value of q.number changes to
 whatever the user passed in via the form -- even if it's invalid, so
 that when I render the page, the invalid value is used.  How do I
 reset the object to have the values it had before I did the try?  Do I
 have to get it afresh from the db?
try something like session.refresh( obj) or similar

 2) How do I let the user know which value caused the record not to
 update?  What information does SQLAlchemy provide back that I can use
 to say: You're number must be unique... and such-and-such must be
 greater than 0, etc..?
mmh, do not mistake DB-constraints with validation-rules.
the only sensible info u can get here is that the record is not unique 
(check what sort of exception that throws), but any further interpretation - 
why, what, where - is up to you - u have to know what field u have just 
set/changed, etc.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---



[sqlalchemy] Re: Handling unique constraints

2008-01-05 Thread Chris

Matt,
Take a look at the formencode module, it will simplify what you are
trying to do here - handles all your parameter validation, form
filling, and telling the user X,Y,Z are wrong etc.

http://wiki.pylonshq.com/display/pylonsdocs/Form+Handling

and formencode docs

http://www.formencode.org/


On Jan 5, 12:13 am, [EMAIL PROTECTED] wrote:
 Matt Haggard wrote:
  I'm using SQLAlchemy with Pylons and am having trouble validating
  data.  I have an App object mapped to a table with a unique constraint
  on App.number.

  Here's some code:

  q = Session.query(App)
  if app_id:
  q = q.filter_by(id=app_id).first()
  if q:
  c.app = q
  number = request.params.get('number')
  notes = request.params.get('notes')
  if appmodel and number:
  try:
  q.number = number
  q.notes = notes
  Session.save(q)
  Session.commit()
  c.message = 'Record updated'
  except:
  # restore pre-form data ?? how??
  c.message = 'Error updating record'
  return render('index.mtl')
  else:
  return self.index()

  My questions are:

  1) When I do the try statement, the value of q.number changes to
  whatever the user passed in via the form -- even if it's invalid, so
  that when I render the page, the invalid value is used.  How do I
  reset the object to have the values it had before I did the try?  Do I
  have to get it afresh from the db?

 try something like session.refresh( obj) or similar

  2) How do I let the user know which value caused the record not to
  update?  What information does SQLAlchemy provide back that I can use
  to say: You're number must be unique... and such-and-such must be
  greater than 0, etc..?

 mmh, do not mistake DB-constraints with validation-rules.
 the only sensible info u can get here is that the record is not unique
 (check what sort of exception that throws), but any further interpretation -
 why, what, where - is up to you - u have to know what field u have just
 set/changed, etc.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---