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.