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.

Reply via email to