I don't know whether to laugh or cry ... thanks

On Mar 28, 6:25 pm, Michael Bayer <mike...@zzzcomputing.com> wrote:
> your enum is set for "uni", "list", "set" and you're passing in "one"
>
> On Mar 28, 2011, at 6:35 AM, farcat wrote:
>
>
>
>
>
>
>
> > Hi all,
>
> > I am stuck on an integrity error. The code worked before, but i cannot
> > figure out what changed so it does not anymore. It is possibly a dumn
> > oversight.
>
> > The code is:
>
> > from sqlalchemy import *
> > from sqlalchemy.ext.declarative import declarative_base
> > from sqlalchemy.orm import relationship
> > from sqlalchemy.orm.session import sessionmaker
>
> > Base = declarative_base()
>
> > def trim(txt):
> >    txt.strip()
> >    return txt
>
> > inheritance_table = Table('inheritance', Base.metadata,
> >    Column('sub_name', String(50), ForeignKey('Type.name'),
> > primary_key=True),
> >    Column('super_name', String(50), ForeignKey('Type.name'),
> > primary_key=True))
>
> > class Member(Base):
> >    __tablename__ = 'Member'
> >    name = Column(String(50), primary_key=True)
> >    multiplicity = Column(Enum("uni", "list", "set"), nullable =
> > False)
> >    reference = Column(Boolean, nullable = False)
> >    type_name = Column(String(50),ForeignKey('Type.name'), nullable =
> > False)
> >    of_type_name = Column(String(50),ForeignKey('Type.name'),
> > primary_key=True)
> >    def __init__(self, name, type, multiplicity = "uni", reference =
> > False):
> >        self.name = trim(name)
> >        self.type = type
> >        self.reference = reference
> >        self.multiplicity = multiplicity
> >    def __repr__(self):
> >        return "Member(%r, %r, %r, %r, %r)" % (self.name,
> >                                               self.of_type_name,
> >                                               self.type_name,
> >                                               self.multiplicity,
> >                                               self.reference)
>
> > class Type(Base):
> >    __tablename__ = 'Type'
> >    name = Column(String(50), primary_key=True)
> >    abstract = Column(Boolean, nullable = False)
> >    atomic = Column(Boolean, nullable = False)
> >    subtypes = relationship('Type',
> >                secondary=inheritance_table,
> >                primaryjoin=inheritance_table.c.super_name==name,
> >                secondaryjoin= name == inheritance_table.c.sub_name,
> >                backref='supertypes')
> >    members = relationship('Member',
> >                primaryjoin=Member.of_type_name==name,
> >                backref='of_type')
> >    of_members = relationship("Member",
> >                primaryjoin = Member.type_name == name,
> >                backref= "type")
>
> >    def isSubOf(self, tp):
> >        if self == tp:
> >            return True
> >        for typ in self.supertypes:
> >            if typ.isSubOf(tp): return True
> >        return False
> >    def addSub(self, tp):
> >        if tp.atomic:
> >            raise Exception("type " + tp.name  + " cannot have
> > supertype")
> >        if self.isSubOf(tp):
> >            raise Exception("adding subtype " + tp + "creates cyclic
> > inheritance")
> >        for mem in tp.members:
> >            self.check(mem.name, mem.type)
> >        self.subtypes.append(tp)
> >    def getAll(self):
> >        out = set(self.members)
> >        for typ in self.supertypes:
> >            out.update(typ.getAll())
> >        return out
> >    def getAny(self, name):
> >        temp = self.getAll()
> >        for mem in temp:
> >            if mem.name == name: return mem
> >        return None
> >    def hasAny(self, name):
> >        return self.getAny(name) != None
> >    def check(self, name, typ, reference):
> >        if self.atomic:
> >            raise Exception("atomic type " + self.name + " cannot be
> > changed")
> >        if self.hasAny(name):
> >            raise Exception("member name " + name + "already exists in
> > this type or supertype")
> >        elif typ.isSubOf(self) and not reference:
> >            raise Exception("member type " + type.name + " equals this
> > type or subtype")
> >    def add(self, name, type, multiplicity = "one", reference =
> > False):
> >        self.check(name, type, reference)
> >        self.members.append(Member(name, type, multiplicity,
> > reference))
> >    def __init__(self, name, atomic = False, abstract = False):
> >        self.name = name
> >        self.atomic = atomic
> >        self.abstract = abstract
> >    def __repr__(self):
> >        out = "Type(%r): {" % (self.name)
> >        for mem in self.members:
> >            out += str(mem) + ", "
> >        out += "}"
> >        return out
>
> > if __name__ == "__main__":
> >    engine = create_engine('sqlite:///:memory:', echo=True)
> >    Base.metadata.drop_all(engine)
> >    Base.metadata.create_all(engine)
> >    Session = sessionmaker(bind=engine)
> >    session = Session()
> >    try:
> >        c1 = Type("A")
> >        c2 = Type("B")
> >        c1.add("m11", c2)
> >        session.add(c1)
> >        session.add(c2)
> >        session.commit() #<== ERROR
> >    except Exception, e:
> >        print "error: " + str(e)
> >        raise
>
> > and the error:
>
> > Traceback (most recent call last):
> >  File "D:\Documents\Code\Eclipse\workspace\test2\src\metadata.py",
> > line 119, in <module>
> >    session.commit()
> >  File "C:\python27\lib\site-packages\sqlalchemy\orm\session.py", line
> > 614, in commit
> >    self.transaction.commit()
> >  File "C:\python27\lib\site-packages\sqlalchemy\orm\session.py", line
> > 385, in commit
> >    self._prepare_impl()
> >  File "C:\python27\lib\site-packages\sqlalchemy\orm\session.py", line
> > 369, in _prepare_impl
> >    self.session.flush()
> >  File "C:\python27\lib\site-packages\sqlalchemy\orm\session.py", line
> > 1388, in flush
> >    self._flush(objects)
> >  File "C:\python27\lib\site-packages\sqlalchemy\orm\session.py", line
> > 1469, in _flush
> >    flush_context.execute()
> >  File "C:\python27\lib\site-packages\sqlalchemy\orm\unitofwork.py",
> > line 302, in execute
> >    rec.execute(self)
> >  File "C:\python27\lib\site-packages\sqlalchemy\orm\unitofwork.py",
> > line 446, in execute
> >    uow
> >  File "C:\python27\lib\site-packages\sqlalchemy\orm\mapper.py", line
> > 1878, in _save_obj
> >    execute(statement, params)
> >  File "C:\python27\lib\site-packages\sqlalchemy\engine\base.py", line
> > 1191, in execute
> >    params)
> >  File "C:\python27\lib\site-packages\sqlalchemy\engine\base.py", line
> > 1271, in _execute_clauseelement
> >    return self.__execute_context(context)
> >  File "C:\python27\lib\site-packages\sqlalchemy\engine\base.py", line
> > 1302, in __execute_context
> >    context.parameters[0], context=context)
> >  File "C:\python27\lib\site-packages\sqlalchemy\engine\base.py", line
> > 1401, in _cursor_execute
> >    context)
> >  File "C:\python27\lib\site-packages\sqlalchemy\engine\base.py", line
> > 1394, in _cursor_execute
> >    context)
> >  File "C:\python27\lib\site-packages\sqlalchemy\engine\default.py",
> > line 299, in do_execute
> >    cursor.execute(statement, parameters)
> > sqlalchemy.exc.IntegrityError: (IntegrityError) constraint failed
> > u'INSERT INTO "Member" (name, multiplicity, reference, type_name,
> > of_type_name) VALUES (?, ?, ?, ?, ?)' ('m11', 'one', 0, 'B', 'A')
>
> > Please help!
>
> > --
> > 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 
> > athttp://groups.google.com/group/sqlalchemy?hl=en.

-- 
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