On Mon, Mar 5, 2018 at 11:40 AM, Mike Bayer <[email protected]> wrote:
> On Mon, Mar 5, 2018 at 1:35 AM, Tolstov Sergey <[email protected]> wrote:
>> On my project, i use __getattr__ for adding column deifinition to object
>> class
>> Such as:
>>
>> def __getattr__(self,attr):
>>     ...
>>       my_load_function(...)
>>       session.refresh(self)
>>    ...
>>     return getattr(self,attr)
>>
>
> I realized you are actually adding a new mapped attribute as the
> __getattr__ is called.   This is a very strange pattern.

note this pattern is entirely non-threadsafe.   if you have multiple
threads you need to use mutexing and double-checks for the attribute
you are looking for.


>
>
>> It works, but refresh loses changes on this object. I cannot flush, because
>> it used for another function.
>
> do session.expire() on the attribute instead.  the getattr() will load it.
>
>
>
>>
>> I found solution
>> session.refresh(self, attribute_names=['attr_name'])
>>
>> But it will raise exception
>> sqlalchemy.exc.InvalidRequestError: No column-based properties specified for
>> refresh operation. Use session.expire() to reload collections and related
>> items.]
>>
>> I already tried use session.expire(self) and session.expire(self,
>> attribute_names=['attr_name'])) before and after refresh, but nothing
>> changed
>>
>> Can someone help me with this eror?
>>
>> --
>> SQLAlchemy -
>> The Python SQL Toolkit and Object Relational Mapper
>>
>> http://www.sqlalchemy.org/
>>
>> To post example code, please provide an MCVE: Minimal, Complete, and
>> Verifiable Example. See http://stackoverflow.com/help/mcve for a full
>> description.
>> ---
>> 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 [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at https://groups.google.com/group/sqlalchemy.
>> For more options, visit https://groups.google.com/d/optout.

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to