Forgive the lack of understanding... still learning the framework: It seems to me that will set the value on the class instead of the instance??
If this is on a webserver with multiple connections, will that affect any other connections for the period that it is set to false? On Feb 13, 8:39 pm, Michael Bayer <[email protected]> wrote: > On Feb 13, 2010, at 7:05 PM, Kent wrote: > > > > > # want to do more queries and change more, so set autoflush to False > > DBSession.autoflush = False > > yeah sorry here, "autoflush" isn't propagated in 0.5.8 to the actual session > when using scoped_session(). That was fixed in 0.6. Here you'd say > DBSession().autoflush = False. > > > > > #however the following still causes flush > > rules=DBSession.query(Order).all() > > > merged.ordersite=u'AA' > > > #now is when I really want to do the flush > > DBSession.flush() > > > ============================================= > > (Output below) > > > As a work-around I can instantiate a new session, but I didn't want > > more sessions than I need and I am not sure at what point I would > > dispose of the extra session (do I just .close() it after my queries?) > > > It seems more efficient to use the same session the turbogears > > framework has set up... is that the case or can I create and close > > sessions often without concern of efficiency? If I fail to close > > them, do they tie up database resources? > > > In general, autoflush staying on is fine, so I'd rather turn autoflush > > off and back on when I am finished with certain transactions where I > > know I want it off. Maybe I'll turn autoflush off in the > > sessionmaker, which seems to work, but I still wonder: > > > Am I doing something wrong? What is my best workaround? > > > Output: > > >>>> from sqlalchemy import * > >>>> from sqlalchemy.orm import * > >>>> from zope.sqlalchemy import ZopeTransactionExtension > > >>>> engine = > >>>> create_engine('postgres://user:p...@localhost:5444/name',echo=True) > >>>> metadata = MetaData() > >>>> maker = sessionmaker(bind=engine, autoflush=True, autocommit=False, > > ... extension=ZopeTransactionExtension()) > >>>> DBSession = scoped_session(maker) > > >>>> order_table = Table("orders", metadata, > > ... Column("orderid", Unicode, primary_key=True), > > ... Column("ordersite", Unicode) > > ... ) > > >>>> class Order(object): > > ... pass > > ... > >>>> order_mapper = mapper(Order, order_table) > > >>>> o=Order() > >>>> o.orderid = u'SALE25863' #this order exists in the database > >>>> o.ordersite = u'00' > > >>>> merged=DBSession.merge(o) > > 2010-02-13 06:48:46,816 INFO sqlalchemy.engine.base.Engine.0x...2510 > > BEGIN > > 2010-02-13 06:48:46,820 INFO sqlalchemy.engine.base.Engine.0x...2510 > > SELECT orders.orderid AS orders_orderid, orders.ordersite AS > > orders_ordersite > > FROM orders > > WHERE orders.orderid = %(param_1)s > > 2010-02-13 06:48:46,820 INFO sqlalchemy.engine.base.Engine.0x...2510 > > {'param_1': 'SALE25863'} > > >>>> # want to do more queries and change more, so set autoflush to False > > ... DBSession.autoflush = False > > >>>> #however the following still causes flush > > ... rules=DBSession.query(Order).all() > > 2010-02-13 06:48:54,620 INFO sqlalchemy.engine.base.Engine.0x...2510 > > UPDATE orders SET ordersite=%(ordersite)s WHERE orders.orderid = % > > (orders_orderid)s > > 2010-02-13 06:48:54,620 INFO sqlalchemy.engine.base.Engine.0x...2510 > > {'ordersite': '00', 'orders_orderid': 'SALE25863'} > > 2010-02-13 06:48:54,622 INFO sqlalchemy.engine.base.Engine.0x...2510 > > SELECT orders.orderid AS orders_orderid, orders.ordersite AS > > orders_ordersite > > FROM orders > > 2010-02-13 06:48:54,622 INFO sqlalchemy.engine.base.Engine.0x...2510 > > {} > > >>>> merged.ordersite=u'AA' > > >>>> #now is when I really want to do the flush > > ... DBSession.flush() > > 2010-02-13 06:49:23,429 INFO sqlalchemy.engine.base.Engine.0x...2510 > > UPDATE orders SET ordersite=%(ordersite)s WHERE orders.orderid = % > > (orders_orderid)s > > 2010-02-13 06:49:23,429 INFO sqlalchemy.engine.base.Engine.0x...2510 > > {'ordersite': 'AA', 'orders_orderid': 'SALE25863'} > > > -- > > 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 > > 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 [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.
