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 <[email protected]>
> 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 [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.
>
--
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.