Thank you very much, it work fine now. Le lundi 31 août 2015 23:03:17 UTC+3, Michael Bayer a écrit : > > > > On 8/31/15 3:39 PM, yoch....@gmail.com <javascript:> wrote: > > Great thanks ! > > > There is something I still doesn't understand with automap_base : some > relationships are created only after the first query call (which takes much > more time to terminate). > > > call configure_mappers() after you call Base.prepare(). > > > > For instance : > > >>> from dbaccess import * # import engine, models, etc. > >>> Dispositif.hardware_collection.attr # doesn't exist yet > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/associationproxy.py" > , line 204, in attr > return (self.local_attr, self.remote_attr) > File > "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/associationproxy.py" > , line 184, in local_attr > return getattr(self.owning_class, self.target_collection) > AttributeError: type object 'Dispositif' has no attribute > 'disp_hdw_collection' > >>> dir(Dispositif) # there is no > 'disp_hdw_collection', but 'hardware_collection' exists (seems because I > define it explicitely) > [..., 'classes', 'hardware_collection', 'id', 'metadata', 'prepare'] > >>> session = Session() # create the first session > >>> l = session.query(Dispositif).all() # first query call, takes about > 2s > >>> Dispositif.hardware_collection.attr # now exists... > (<sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x148edb0>, < > sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x12f2f90>) > >>> dir(Dispositif) # many news relationships and > collections appear here > [..., 'classes', 'disp_hdw_collection', 'hardware_collection', 'id', > 'metadata', 'prepare', <some_more_collections...>] > > > Le lundi 31 août 2015 16:33:52 UTC+3, Michael Bayer a écrit : > > > > On 8/31/15 8:23 AM, yoch....@gmail.com wrote: > > > Thank you very much. > > Le lundi 31 août 2015 06:17:37 UTC+3, Michael Bayer a écrit : > > > > On 8/29/15 2:27 PM, yoch....@gmail.com wrote: > > Thanks for the reply. > > Le vendredi 28 août 2015 18:52:37 UTC+3, Michael Bayer a écrit : > > > > On 8/28/15 3:51 AM, yoch....@gmail.com wrote: > > Another question is why sqlalchemy produce two queries to get hardwares > collections from a dispositif : > > > >>> some_disp.hardwares > 2015-08-28 10:36:41,722 INFO sqlalchemy.engine.base.Engine SELECT disp_hdw > .iddispositif AS disp_hdw_iddispositif, disp_hdw.idhardware AS > disp_hdw_idhardware, disp_hdw.instance AS disp_hdw_instance > FROM disp_hdw > WHERE %s = disp_hdw.iddispositif > 2015-08-28 10:36:41,725 INFO sqlalchemy.engine.base.Engine (2721L,) > 2015-08-28 10:36:41,768 INFO sqlalchemy.engine.base.Engine SELECT hardware > .hdw_type AS hardware_hdw_type, hardware.id AS hardware_id, hardware.idbox > AS hardware_idbox > FROM hardware > WHERE hardware.id = %s > 2015-08-28 10:36:41,772 INFO sqlalchemy.engine.base.Engine (268L,) > > > There's no context given here, but that would indicate that the > "some_disp" instance has been expired. When you .commit() a session, all > objects are expired by default. This is so that if, when you next operate > on the objects, some other transaction has deleted that row, the session > can let you know that you're working on stale data. See the session docs > for options on how to control this behavior. > > > Here the context, all in the same session : > > >>> from dbaccess import * # import engine, Base and tables objects > >>> from sqlalchemy.orm.session import sessionmaker > >>> Session = sessionmaker(bind=engine) > >>> session = Session() > >>> l = session.query(Dispositif).all() > >>> some_disp = l > > ...
-- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.