Hey Mike and company,
If you were to run the following code against a postgresql 9.5+ database,
you'll see an exception because the "contains" function sqlalchemy
associates with the func.tstzrange expression below is intended for an
Interval type when instead it ought to use the contains for a Timestamp.
After the code example is the exception that is raised, followed by a query
you can run to confirm that a Timestamp type is created.
Thanks for considering!
Darin
-------------------------------------------------------------------------------------------------------------------------
from sqlalchemy.dialects.postgresql import INTERVAL
from sqlalchemy import (create_engine, select, func, literal, cast)
db_url = "postgres://enter your db info here"
engine = create_engine(db_url, echo=True)
with engine.connect() as conn:
timeslot = func.tstzrange((func.current_date() + cast('8 hours',
INTERVAL())),
(func.current_date() + cast('12
hours', INTERVAL())),
'[]')
is_ongoing = conn.scalar(select([literal(True)]).
where(timeslot.contains(func.now())))
print('\n\n', is_ongoing.compile(engine))
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
sqlalchemy.exc.DataError: (psycopg2.DataError) invalid input syntax for
type interval: "%"
LINE 2: ...T_DATE + CAST('12 hours' AS INTERVAL), '[]') LIKE '%' + now(...
^
[SQL: "SELECT %(param_1)s AS anon_1 \nWHERE (tstzrange(CURRENT_DATE +
CAST(%(param_2)s AS INTERVAL), CURRENT_DATE + CAST(%(param_3)s AS
INTERVAL), %(tstzrange_1)s) LIKE '%%' + now() || '%%')"] [parameters:
{'param_1': True, 'param_2': '8 hours', 'param_3': '12 hours',
'tstzrange_1': '[]'}]
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
To confirm Timestamp type, run: SELECT pg_typeof(CURRENT_DATE + '8
hours'::interval);
--
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.