Ah but it also looks like the before_update event isn't triggered when 
doing bulk query updates, which we'd like to also update on. Is there a way 
to track those?

On Wednesday, May 15, 2019 at 10:38:24 AM UTC-7, Mike Bayer wrote:
>
> you can inspect() the object and look at 
> inspect(obj).attrs['some_attr'].history 
>
>
> https://docs.sqlalchemy.org/en/13/orm/internals.html#sqlalchemy.orm.state.AttributeState
>  
>
>
> On Wed, May 15, 2019 at 1:14 PM Tony Cao <to...@benchling.com 
> <javascript:>> wrote: 
> > 
> > Hi, 
> > 
> > Thanks for the response! I also tried looking into before_update, but is 
> there a recommended way to figure out what columns are being updated from 
> that event? I had found this post (
> https://stackoverflow.com/questions/15642286/how-can-i-get-a-sqlalchemy-orm-objects-previous-state-after-a-db-update)
>  
> that suggests looking at the history of the attribute state - is there a 
> better way? 
> > 
> > On Wednesday, May 15, 2019 at 7:55:44 AM UTC-7, Mike Bayer wrote: 
> >> 
> >> On Mon, May 13, 2019 at 4:18 PM Tony Cao <to...@benchling.com> wrote: 
> >> > 
> >> > Hi all, 
> >> > 
> >> > Is there way to use Column.onupdate conditionally? For example, say I 
> have: 
> >> > 
> >> > class A(Base): 
> >> >     foo = Column(String) 
> >> >     bar = Column(String) 
> >> >     foo_updated = Column(DateTime, onupdate=update_fn) # Should only 
> update when foo is updated 
> >> > 
> >> > def update_fn(context): 
> >> >     if ...: # How can I check if only foo was updated? 
> >> >         return datetime.now() 
> >> >     else: 
> >> >         return ... # How can I say to not update? 
> >> > 
> >> > Is there a way to define update_fn to only update foo_updated when 
> foo changes? I can look at context.get_current_parameters() to see what 
> columns are being used in the compiled statement, but it doesn't explicitly 
> say which columns are the ones actually being updated; for example, if I 
> have 
> >> > 
> >> > A.query.filter(A.bar == 'test').update({A.foo: 'new'}, 
> synchronize_session=False) 
> >> > 
> >> > then context.get_current_parameters will return a dict with keys for 
> both 'bar' and 'foo', although it looks like it suffixes the filter param 
> with a '_1' - is that something I can rely on to know if a column is used 
> as a filter instead of an update? And beyond that, is there a way I can 
> specify to not update the column? 
> >> > 
> >> > Alternatively, is there another approach recommended to doing this? 
> >> 
> >> the most common way is to use the ORM level before_update event: 
> >> 
> >> 
> https://docs.sqlalchemy.org/en/13/orm/events.html?highlight=before_update#sqlalchemy.orm.events.MapperEvents.before_update
>  
> >> 
> >> there's also before_execute() at the Core level, but before the UPDATE 
> >> statement is even written, e.g. at the ORM level, is the best way. 
> >> Once you are in the onupdate Python function, you have to return a 
> >> value, as this occurs well after the UPDATE statement has been 
> >> compiled. 
> >> 
> >> 
> >> 
> >> 
> >> > 
> >> > Thanks! 
> >> > 
> >> > -- 
> >> > 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 sqlal...@googlegroups.com. 
> >> > To post to this group, send email to sqlal...@googlegroups.com. 
> >> > Visit this group at https://groups.google.com/group/sqlalchemy. 
> >> > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/b66e89c9-6618-4600-9381-182fa101f5b6%40googlegroups.com.
>  
>
> >> > 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 sqlal...@googlegroups.com <javascript:>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:>. 
> > Visit this group at https://groups.google.com/group/sqlalchemy. 
> > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/f13c4205-1df5-49c5-8c91-3c97cd8d9b05%40googlegroups.com.
>  
>
> > 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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/38b1162d-1204-41b7-9649-3938775eeef8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to