Got it. I just change session.add(screenGroup) to session.merge(screenGroup) and it works.
Thank you for you help, it's always really useful. On Nov 19, 3:10 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: > The most suspicious thing is self.__dict__['foo'] = list() as well as the > direct access to self.__dict__['foo']. If "self" is a mapped object, then > thats your issue. > > Also note this is still an out of context cut-and-paste, if you really want > me to figure it out it has to be an isolated test script. > > On Nov 19, 2010, at 2:49 PM, Alvaro Reinoso wrote: > > > Ok, This is the code: > > > �...@staticmethod > > def insert(string, mode): > > """Insert a new item given a string""" > > screenGroup = ScreenGroup() > > session = rdb.Session() > > > try: > > if mode == "XML": > > screenGroup.fromXML(string) > > elif mode == "JSON": > > screenGroup.fromJSON(string) > > if screenGroup.id == None: > > session.add(screenGroup) > > else: > > screenGroup = session.merge(screenGroup) > > > session.flush() > > result = "Successful:" + str(screenGroup.id) + "," + > > screenGroup.title > > return result > > except Exception, e: > > log.warn("::ScreenGroupManager, insert > The error is " > > + str(e)) > > return "<WARN>Error connecting to the database. Please > > try again > > later.</WARN>" > > > return "<WARN>Error connecting to the database. Please try again > > later.</WARN>" > > > This is the function where it gets the error. When I already have the > > item and I merge It works out. However, if it's a new item, breaks. > > This anothe fromXML function: > > > def fromXML(self, data): > > """Unserializes this class from an XML formatted file or > > string.""" > > root = "" > > try: > > if(data.endswith(".xml")): > > doc = etree.parse(data) > > root = doc.getroot() > > else: > > root = etree.XML(data) > > except etree.XMLSyntaxError, e: > > print e > > pass > > > if not type(root) == type(etree.XML("<data>test</data>")): > > return > > > if root.tag == "screenGroup": > > for child in root.iterchildren(): > > if child.tag == "screens" or child.tag == > > "screenGroups": > > if child.text: > > items = child.text.split(",") > > self.__dict__[child.tag] = list() > > for itemId in items: > > if child.tag == > > "screens": > > item = > > ScreenManager.getScreenById(itemId) > > else: > > item = > > ScreenGroupManager.getGroupScreenById(itemId) > > > > self.__dict__[child.tag].append(item) > > else: > > self.setAttr(child.tag, child.text) > > > ScreenManager.getScreenById(itemId) and > > ScreenGroupManager.getGroupScreenById(itemId) just get the item from > > the database (session.query(Screen).get(int(itemId))). > > > This is the XML string : <screenGroup><title>Group 10</ > > title><screens>4,3</screens><screenGroups></screenGroups></ > > screenGroup> > > > Thanks! > > > On Nov 18, 7:07 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: > >> looks fine to me, would need full stack trace + single script file of > >> runnable, reproducing code, thanks. > > >> On Nov 18, 2010, at 6:37 PM, Alvaro Reinoso wrote: > > >>> Hello, > > >>> When trying to add a new item doing: > > >>> session = session.add(mediaGroup) > > >>> I got this error: > > >>> Module sqlalchemy.orm.attributes:834 in get_collection > >>> return getattr(user_data, '_sa_adapter') > >>> class GenericBackrefExtension(interfaces.AttributeExtension):>> > >>> return getattr(user_data, '_sa_adapter') > > >>> "AttributeError: 'list' object has no attribute '_sa_adapter'" > > >>> This object's class: > > >>> class ScreenGroup(rdb.Model): > >>> """The ScreenGroup is a class derived from ScreenGroup, it is used to > >>> control users within a group""" > >>> rdb.metadata(metadata) > >>> rdb.tablename("screen_groups") > > >>> id = Column("id", Integer, primary_key=True) > >>> title = Column("title", String(100)) > >>> parents = Column("parents", String(512)) > > >>> screens = relationship("Screen", secondary=group_screens, > >>> order_by="Screen.title", backref="screen_groups") > >>> screenGroups = relationship("ScreenGroup", > >>> secondary=screen_group_groups, order_by="ScreenGroup.title", > >>> primaryjoin=lambda: ScreenGroup.id == > >>> screen_group_groups.c.screen_groupA_id, > >>> secondaryjoin=lambda: ScreenGroup.id == > >>> screen_group_groups.c.screen_groupB_id, > >>> backref="screen_groups") > > >>> Thanks in advance! > > >>> -- > >>> You received this message because you are subscribed to the Google Groups > >>> "sqlalchemy" group. > >>> To post to this group, send email to sqlalch...@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 sqlalch...@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 sqlalch...@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.