Sorry if you receive this twice, I am not sure if it had been
correctly posted.

On 26 août, 14:49, Martin-Leon Francois <francois....@gmail.com>
wrote:
> hi,
>
> The problem seems to be a little bit more general, I have a unique class 
> (doing nothing) mapped to a unique table.
> After opening a session, I create an instance, add it to the session, flush, 
> commit.
> Everything is ok. --> a row in the table, instance in the identity_map of the 
> session
>
> Always in the same session, I delete the instance from the session., flush, 
> commit.
> Everything is ok. --> no row in the table, no  instance in the identity_map 
> of the session
>
> Always the same session, I add again the python instance to the session, 
> flush, commit.
> ??? -->  no row in the table, instance in the identity_map of the session
>
> Could you have a look to the code below and help me figure out what I doing 
> wrong?
> fma
>
> from sqlalchemy import __version__, MetaData, Table, Column, Integer, String, 
> create_engine, orm #...@unresolvedimport
> from sqlalchemy.orm import mapper #...@unresolvedimport
> from sqlalchemy.orm import backref #...@unresolvedimport @UnusedImport
>
> print __version__
>
> meta = MetaData()
> tb_one = Table("one", meta,
>                Column('name',String(50)),
>                Column('id',Integer, primary_key=True))
>
> class One(object):
>     def __init__(self, name):
>         self.name = name
>
>     def __repr__(self):
>         return self.name
>
> mapper_one = mapper(One,tb_one)
> engine = create_engine('postgres://fma:fma6...@localhost:5432/postgres',
>                       convert_unicode=True)
> Session = orm.sessionmaker(autoflush=True, autocommit=False, bind=engine)
> meta.bind = engine
> meta.drop_all(checkfirst=True)
> meta.create_all(checkfirst=True)
>
> s = Session()
>
> o1 = One("One")
> s.add(o1)
> s.add_all([o1])
> s.flush()
> s.commit()
>
> print list(s.query(One)), s.identity_map
> s.delete(o1)
> s.flush()
> s.commit()
> print list(s.query(One)), s.identity_map
>
> #If I uncomment the following line (workaround) instance is written down to
> #the database as I would expect
> #o1._sa_instance_state = o1._sa_class_manager._create_instance_state(o1)
>
> s.add(o1)
> s.add_all([o1])
> s.flush()
> s.commit()
> print list(s.query(One)), s.identity_map
> s.close()
>
> Le 26 août 2010 à 08:42, fma a écrit :
>
>
>
> > Any suggestion helping solving this?
>
> > On 25 août, 13:02, Martin-Leon Francois <francois....@gmail.com>
> > wrote:
> >> Hi,
>
> >> I am trying in the same  session to detach an instance from a collection ( 
> >> one to many)
> >> flush and commit everything (all is ok) and then attach the removed 
> >> instance  again. unsuccessfully.
>
> >> in below code,  last "assert" fails.
> >> I don't understand why I am not able to append m2 to o1.to_many collection 
> >> once removed.
>
> >> Any idea? ( I use sa 0.5.6)
>
> >> thanx, Francois
>
> >> meta = MetaData()
> >> tb_one = Table("one", meta,
> >>                Column('name',String(50)),
> >>                Column('id',Integer, primary_key=True))
>
> >> tb_many = Table("many", meta,
> >>                Column('name',String(50)),
> >>                Column('id',Integer, primary_key=True),
> >>                Column('one_id', Integer, 
> >> ForeignKey(tb_one.c.id,ondelete='CASCADE'), nullable=False),)
>
> >> class One(object):
> >>     def __init__(self, name):
> >>         self.name = name
>
> >> class Many(object):
> >>     def __init__(self, name):
> >>         self.name = name
>
> >> mapper_one = mapper(One,tb_one)
> >> mapper_many = mapper(Many, tb_many,
> >>                      properties = dict(
> >>                      to_one = relation(One,uselist=False, 
> >> backref=backref('to_many', cascade="save-update, merge, delete, 
> >> delete-orphan"),)))
>
> >> engine = create_engine(....)
> >> Session = orm.sessionmaker(autoflush=True, autocommit=False, bind=engine)
>
> >> meta.bind = engine
> >> meta.drop_all(checkfirst=True)
> >> meta.create_all(checkfirst=True)
>
> >> s = Session()
> >> m1 = Many("M1")
> >> m2 = Many("M2")
> >> o1 = One("One")
> >> o1.to_many.append(m1)
> >> o1.to_many.append(m2)
>
> >> s.add_all([m1,m2,o1])
> >> s.flush()
> >> s.commit()
> >> assert(len(o1.to_many) == 2)
>
> >> o1.to_many.remove(m2)
> >> assert(len(o1.to_many) == 1)
> >> s.flush()
> >> s.commit()
> >> assert(len(o1.to_many) == 1)
>
> >> o1.to_many.append(m2)
> >> assert(len(o1.to_many) == 2)
> >> s.flush()
> >> s.commit()
> >> assert(len(o1.to_many) == 2) #this assert fails why?
>
> >> s.close()
>
> > --
> > 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.

Reply via email to