Just in case someone stumbles upon it in future.
I am using Postgres and I got the following results:
# This worked:
`the_sample.end_date = func.now()`
`db.session.commit()`
# This too worked:
`setattr(the_sample, 'end_date', func.now())`
`db.session.commit()`
# This didn't work though:
`Sample.query.filter_by(...).update({'end_date': func.now()})`
`db.session.commit()`
When using `Flask-SQLAlchemy` and setting `SQLALCHEMY=True`, the first two
cases logs the `UPDATE` query followed by logging `COMMIT`. The last case
didn't even logs the `UDPATE` query but directly logs a `ROLLBACK` with no
other info.
Not sure of underlying cause, just recording it so that someone from future
saves some time.
On Wednesday, June 15, 2016 at 8:10:30 PM UTC+5:30, Jean-Philippe Morin
wrote:
>
> This is great! Thanks!
>
> On Wednesday, June 15, 2016 at 10:36:07 AM UTC-4, Mike Bayer wrote:
>>
>>
>>
>> On 06/15/2016 10:13 AM, Jean-Philippe Morin wrote:
>> > (I am using PostgreSQL)
>> >
>> > I want to use the TIMESTAMP values of the SQL server machine instead of
>> > the python `datetime.utcnow()` value of the WEB server machines.
>> >
>> > There could be latencies or time diffierences between machines, so I
>> > would like to use the database server date and time as a common ground.
>> >
>> > Here is an example of what I would like to do:
>> >
>> > |
>> > classSample(Base):
>> > start_date
>> > =Column('start_date',DateTime,server_default=func.now(),nullable=False)
>> > last_update_date
>> >
>> =Column('last_update_date',DateTime,server_default=func.now(),onupdate=func.now(),nullable=False)
>>
>>
>> > end_date =Column('end_date',DateTime,nullable=True)
>> >
>> > |
>> >
>> > When the model is created, its `start_date` column is set to the
>> default
>> > DateTime value of the SQL server by using `server_default=func.now()`.
>> > Then, on every updates made on the model, its `last_update_date` is set
>> > to the current DateTime value of the SQL server by using
>> > `onupdate=func.now()`.
>> >
>> > |
>> > defstart_acquisition():
>> > new_sample =Sample()
>> > # ... set sample columns ...
>> > DBSession.add(new_sample)
>> > DBSession.commit()
>> >
>> > defstop_acquisition(sample_id):
>> > the_sample =DBSession.query(Sample).filter_by(...)
>> > # ... set sample columns ...
>> > the_sample.end_date =???
>> > DBSession.commit()
>> >
>> > |
>> >
>> > How can I tell SQLAlchemy that on THAT particular update in
>> > `stop_acquisition`, I want to set the `end_date` column to the
>> > `func.now()` of the SQL server with the rest of the other modified
>> columns?
>>
>> just assign func.now() to it, it will render as that SQL expression in
>> the UPDATE.
>>
>>
>> http://docs.sqlalchemy.org/en/rel_1_0/orm/persistence_techniques.html#embedding-sql-insert-update-expressions-into-a-flush
>>
>>
>>
>>
>>
>> >
>> > What would be the proper way of doing that? Is there something like an
>> > `HybridProperty.expression` that could be used for inserts and updates?
>> >
>> > --
>> > 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]
>> > <mailto:[email protected]>.
>> > To post to this group, send email to [email protected]
>> > <mailto:[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.