[Sqlalchemy-tickets] Issue #4174: Parenthesis Ignored (zzzeek/sqlalchemy)
Brought to you by:
zzzeek
From: Lukas S. <iss...@bi...> - 2018-01-25 19:36:18
|
New issue 4174: Parenthesis Ignored https://bitbucket.org/zzzeek/sqlalchemy/issues/4174/parenthesis-ignored Lukas Siemon: Minimal Test Case below (uses postgresql 9.6 latest). Generates SQL (which is obviously invalid): ```sql SELECT now() + CAST(%(param_1)s AS INTERVAL) at time zone %(param_2)s AS anon_1, person.id AS person_id FROM person ``` We are solving this for now by casting explicitly to DateTime, but we would expect parenthesis to be handled correctly. ```python import unittest from sqlalchemy import Column, Integer, func from sqlalchemy.dialects.postgresql import INTERVAL from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import column_property from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = ( "postgresql://postgres:password@localhost:5432/gitl_tmp") app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) Base = declarative_base() class Person(db.Model): __tablename__ = 'person' id = Column(Integer, primary_key=True, nullable=False) time = column_property( ( func.now() + func.cast('1 week', INTERVAL) ).op("at time zone")('America/Vancouver') ) db.drop_all() db.create_all() class TestExecutionOrder(unittest.TestCase): def test_execution_order(self): db.session.add(Person()) db.session.commit() query = Person.query print query person = Person.query.one() print person.time ``` |