The most logical place would seem to be the database - create a unique constraint on the 'name' column, or even make the name column the primary key rather than the integer ID.
On Jun 16, 12:29 pm, Rich <[email protected]> wrote: > Two part question... I have a table of activity types . I want to > follow a ‘singleton pattern’ (ie. Only one instance of > ‘run’,’jump’,’swim’ etc.). I have a get_or_create function on the > class that works as long as programmers using my module call: > session.add( ActivityType.get_or_create(‘fly’)) > session.commit() > > Question1: How can I modify my model/class shown below to either > prevent, or better yet, allow: > session.add(ActivityType(‘fly’)) > session.commit() > > Question2: (depending on answer above.) How can I ensure singleton if > my programmers do: > a1 = ActivityType(‘fly’) > a2 = ActivityType(‘fly’) > session.add(a1) > session.add(a2) > session.commit() > > Thanks or any guidance. > Rich > > # Here is my table + class + mapper > > tblActivityType = sa.Table('activitytype', metadata, > sa.Column('id', sa.Integer, primary_key=True), > sa.Column('name', sa.String(128), nullable=False) > ) > > class ActivityType(object): > > def __init__(self, name=None): > self.name = name.lower() > > @staticmethod > def get_or_create(tmpStr): > _session = Session() > > mything = > _session.query(ActivityType).filter_by(name=tmpStr.lower() ).first() > if mything is not None: > return mything > else: > return ActivityType(tmpStr.lower()) > > mapper(ActivityType, tblActivityType) -- You received this message because you are subscribed to the Google Groups "sqlalchemy" 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/sqlalchemy?hl=en.
