I haven't boiled this down to a short test case yet, but when my WHERE
clause gets especially long I start getting the "recursion depth exceeded"
exception. Is this a well-known limitation of sqlalchemy? We're running
this query in production currently without SQLAlchemy, and it performs
fine, but perhaps I need to look for another approach...
If I keep the filter condition relatively short, my query looks like this
and runs fine (with fake columns start_date, X, Y, and Z on table T):
SELECT X, sum(Z) AS Z
FROM T
WHERE T.start_date >= :start_date_1
AND T.start_date <= :start_date_2
AND NOT (T.X = :X_1 AND T.Y = :Y_1)
AND NOT (T.X = :X_2 AND T.Y = :Y_2)
AND NOT (T.X = :X_3 AND T.Y = :Y_3)
GROUP BY T.X
However, if I make the filter() clause very long (over 150 AND NOT...
clauses), I start getting exceptions with this stack trace:
File "test.py", line 350, in do_test
print q
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py",
line 3031, in __str__
return str(self._compile_context().statement)
File
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/expression.py", line
1790, in __str__
return unicode(self.compile()).encode('ascii', 'backslashreplace')
File
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/expression.py", line
1778, in compile
return self._compiler(dialect, bind=bind, **kw)
File
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/expression.py", line
1784, in _compiler
return dialect.statement_compiler(dialect, self, **kw)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 277, in __init__
engine.Compiled.__init__(self, dialect, statement, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py",
line 705, in __init__
self.string = self.process(self.statement)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py",
line 724, in process
return obj._compiler_dispatch(self, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py",
line 72, in _compiler_dispatch
return getter(visitor)(self, **kw)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 941, in visit_select
t = select._whereclause._compiler_dispatch(self, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py",
line 72, in _compiler_dispatch
return getter(visitor)(self, **kw)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 477, in visit_clauselist
for c in clauselist.clauses)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 475, in <genexpr>
s for s in
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 477, in <genexpr>
for c in clauselist.clauses)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py",
line 72, in _compiler_dispatch
return getter(visitor)(self, **kw)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 477, in visit_clauselist
for c in clauselist.clauses)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 475, in <genexpr>
s for s in
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 477, in <genexpr>
for c in clauselist.clauses)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py",
line 72, in _compiler_dispatch
return getter(visitor)(self, **kw)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 477, in visit_clauselist
for c in clauselist.clauses)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 475, in <genexpr>
s for s in
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 477, in <genexpr>
for c in clauselist.clauses)
...
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 475, in <genexpr>
s for s in
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 477, in <genexpr>
for c in clauselist.clauses)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py",
line 72, in _compiler_dispatch
return getter(visitor)(self, **kw)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 477, in visit_clauselist
for c in clauselist.clauses)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 475, in <genexpr>
s for s in
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py",
line 477, in <genexpr>
for c in clauselist.clauses)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py",
line 72, in _compiler_dispatch
return getter(visitor)(self, **kw)
RuntimeError: maximum recursion depth exceeded
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/sqlalchemy/-/FeiLu3iVqisJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.