I ended up implementing them in the model and have the controller
handle the failures.

I thought of implementing the validation in the DB but as you said
it's a bigger deal and I can avoid it.

Thanks!

On Nov 27, 8:10 am, Michael Bayer <mike...@zzzcomputing.com> wrote:
> On Nov 25, 2011, at 6:05 PM, espresso maker wrote:
>
>
>
>
>
>
>
>
>
> > Hi,
>
> > I am wondering what's the best practice to implement relationship
> > constraints in sqlalchemy.
>
> > Example:
>
> >    Let's assume we have  Account (1) <---- (n)SNMPMonitor  and we
> > want to have the following constraints:
>
> >        No account can have more than 10 SNMP Monitors.
> >        No account can have more than 5 SNMP Monitors if their
> > subscription level is X
> >        No account should have more than 7 SNMP Monitors started  at
> > the same time.
>
> > SNMPMonitor has methods like : start/stop/reload
>
> > I am wondering where is it best to implement these constraints?
>
> > I am trying to avoid having methods like start_monitor in Account so
> > that Account can check if this action is allowed or not. Having such a
> > method means I have to pass the monitor instance to start_monitor
> > which will eventually do monitor.start(). I feel this is dirty because
> > 'start_monitor' should belong to 'SNMPMonitor' as a method named
> > 'start'. Also having a method like 'add_monitor' in Account defeats
> > having a backref like a.monitors that allows me to do
> > a.monitors.append(new_monitor).
>
> the most straightforward route would be the @validates decorator or an 
> attribute event.
>
> Following that, validation can also be done in the before_flush() event 
> though @validates is probably plenty for this.
>
> That's of course assuming app-side validation is "enough" here, taking it to 
> the DB side becomes a bigger deal (triggers, SPs).

-- 
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 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to