Tefnet Developers wrote:
>
> Hi,
>
> and here comes another problem with my project utilizing SQLAlchemy :).
>
> I am trying to use ORM in AttributeExtension:
> (http://dpaste.com/109454/)
> =========================================================
> import sqlalchemy
> import sqlalchemy.ext.declarative
>
> Base = sqlalchemy.ext.declarative.declarative_base(mapper =
> sqlalchemy.orm.mapper)
>
> engine = sqlalchemy.create_engine('sqlite:///:memory:', echo = False)
>
> session = sqlalchemy.orm.scoped_session(sqlalchemy.orm.sessionmaker(bind
> = engine))
>
> Base.metadata.bind = engine
>
> class AttrEx(sqlalchemy.orm.interfaces.AttributeExtension):
>     def set(self, state, value, oldvalue, initiator):
>       for o in session.query(Foo):
>               pass
>       return value
>
> class Foo(Base):
>     Id = sqlalchemy.Column( sqlalchemy.types.Integer, primary_key =
> True, autoincrement  =True)
>     __tablename__ = 'foo'
>
> class Bar(Base):
>     Id = sqlalchemy.Column(sqlalchemy.types.Integer, primary_key=True,
> autoincrement = True)
>     someAttr =
> sqlalchemy.orm.column_property(sqlalchemy.Column(sqlalchemy.types.Integer),
> extension = AttrEx())
>     __tablename__ = 'bar'
>
> Base.metadata.create_all()
>
> a = Bar()
> session.add(a)
> a.someAttr = 5
> assert a.someAttr == 5
> session.commit()
> assert a.someAttr == 5
> =========================================================
>
> Seccond assert explodes. It seems that query'ing in AttrEx's set()
> method triggers flush (autoflush which I need) and somehow value
> returned by set() gets lost. Is there a correct way to manipulate other
> mapped objects in AttributeExtensions?

you can disable the autoflush if you say
query.autoflush(False).whatever().  I'd start there.    At the same time
the AttributeExtensions are firing off in the middle of a sensitive
section so some issues are unavoidable.




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