this is a very simple issue to debug with basic programming
techniques, first off, put echo='debug' in your create_engine so you
can see all SQL and results:
e = create_engine("postgresql://scott:tiger@localhost/test", echo='debug')
next, if you are running over to a SQL command line vs. running a
program, the big difference is that *time has passed*. Put a sleep in
your program and there is your row:
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.declarative import declared_attr
import datetime
Base = declarative_base()
class User(Base):
__tablename__ = 'test_user'
id = Column(Integer, primary_key=True)
timeout = Column(Integer)
last_receive_time = Column(TIMESTAMP)
e = create_engine("postgresql://scott:tiger@localhost/test", echo='debug')
Base.metadata.drop_all(e)
Base.metadata.create_all(e)
session = Session(e)
for i in range(10):
session.add( User( timeout=1, last_receive_time=datetime.datetime.now() ))
session.commit()
import time
time.sleep(1)
query = session.query(User)\
.from_statement(text("""
SELECT *
FROM test_user
WHERE (last_receive_time + INTERVAL '1 second' * timeout) < NOW() """))
assert len(query.all()) == 10
On Wed, Jun 27, 2018 at 6:30 AM, Danila Ganchar
<[email protected]> wrote:
> Ok. I ran the script 10 times on a clean table.
> Now I run raw sql:
>
> SELECT *
> FROM test_user
> WHERE (last_receive_time + INTERVAL '1 second' * timeout) < NOW();
>
> The result: 10 records.
> Now I run script one more time. Still 0 records using from_statement.
>
> amount records using NOW() = 0
>
> As I understand it, is this correct? This is just unclear because
> from_statement + text works not like raw query.
>
> On Tue, Jun 26, 2018 at 7:42 PM, Mike Bayer <[email protected]>
> wrote:
>>
>> definitely, triyng to match up python .now() with database .now() is
>> not going to work, in particular since .now() in the database is often
>> the transaction start time, not the actual time.
>>
>> On Tue, Jun 26, 2018 at 12:28 PM, Jonathan Vanasco
>> <[email protected]> wrote:
>> > the difference is possibly because this is calculated in Python, each
>> > time
>> > it is executed:
>> >
>> > datetime.datetime.now()
>> >
>> > this is calculated in Postgres, and refers to the beginning of the
>> > transaction; it does not change across the transaction.
>> >
>> > NOW()
>> >
>> > --
>> > 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.
>
>
> --
> 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.