<h3 dir="auto">Describe the bug</h3>
<p dir="auto"><code class="notranslate">custom_op</code> usage leads to duplicated entries in query cache.</p>
<p dir="auto">I have found this issue by discovering a memory leak in my application. We have big queries with size <code class="notranslate">~1 Mb</code> and with default <code class="notranslate">query_cache_size=500</code> it leads to cases when application consumes <code class="notranslate">500+ Mb</code> after some time.</p>
<h3 dir="auto">Optional link from <a href="https://docs.sqlalchemy.org" rel="nofollow">https://docs.sqlalchemy.org</a> which documents the behavior that is expected</h3>
<p dir="auto"><em>No response</em></p>
<h3 dir="auto">SQLAlchemy Version in Use</h3>
<p dir="auto">2.0.6</p>
<h3 dir="auto">DBAPI (i.e. the database driver)</h3>
<p dir="auto">any</p>
<h3 dir="auto">Database Vendor and Major Version</h3>
<p dir="auto">any</p>
<h3 dir="auto">Python Version</h3>
<p dir="auto">3.11</p>
<h3 dir="auto">Operating system</h3>
<p dir="auto">any</p>
<h3 dir="auto">To Reproduce</h3>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from sqlalchemy import select, literal, create_engine

engine = create_engine(&quot;postgresql://postgres:postgres@localhost:5432/postgres&quot;)


def main() -&gt; None:
    with engine.connect() as conn:
        for _ in range(10):
            query = select(literal(1).op(&quot;+&quot;)(literal(1)))

            conn.execute(query)

    print(len(engine._compiled_cache))

    for entry in engine._compiled_cache.items():
        print(entry)


if __name__ == &quot;__main__&quot;:
    main()"><pre class="notranslate"><span class="pl-k">from</span> <span class="pl-s1">sqlalchemy</span> <span class="pl-k">import</span> <span class="pl-s1">select</span>, <span class="pl-s1">literal</span>, <span class="pl-s1">create_engine</span>

<span class="pl-s1">engine</span> <span class="pl-c1">=</span> <span class="pl-en">create_engine</span>(<span class="pl-s">"postgresql://postgres:postgres@localhost:5432/postgres"</span>)


<span class="pl-k">def</span> <span class="pl-en">main</span>() <span class="pl-c1">-&gt;</span> <span class="pl-c1">None</span>:
    <span class="pl-k">with</span> <span class="pl-s1">engine</span>.<span class="pl-en">connect</span>() <span class="pl-k">as</span> <span class="pl-s1">conn</span>:
        <span class="pl-k">for</span> <span class="pl-s1">_</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">10</span>):
            <span class="pl-s1">query</span> <span class="pl-c1">=</span> <span class="pl-en">select</span>(<span class="pl-en">literal</span>(<span class="pl-c1">1</span>).<span class="pl-en">op</span>(<span class="pl-s">"+"</span>)(<span class="pl-en">literal</span>(<span class="pl-c1">1</span>)))

            <span class="pl-s1">conn</span>.<span class="pl-en">execute</span>(<span class="pl-s1">query</span>)

    <span class="pl-en">print</span>(<span class="pl-en">len</span>(<span class="pl-s1">engine</span>.<span class="pl-s1">_compiled_cache</span>))

    <span class="pl-k">for</span> <span class="pl-s1">entry</span> <span class="pl-c1">in</span> <span class="pl-s1">engine</span>.<span class="pl-s1">_compiled_cache</span>.<span class="pl-en">items</span>():
        <span class="pl-en">print</span>(<span class="pl-s1">entry</span>)


<span class="pl-k">if</span> <span class="pl-s1">__name__</span> <span class="pl-c1">==</span> <span class="pl-s">"__main__"</span>:
    <span class="pl-en">main</span>()</pre></div>
<h3 dir="auto">Error</h3>
<p dir="auto">Will print 10 instead of 1:</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="10
(&lt;sqlalchemy.dialects.postgresql.psycopg2.PGDialect_psycopg2 object at 0x10c5a9250&gt;, ('0', &lt;class 'sqlalchemy.sql.selectable.Select'&gt;, '_raw_columns', (('1', &lt;class 'sqlalchemy.sql.elements.BinaryExpression'&gt;, 'left', ('2', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '3', False), 'right', ('4', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '5', False), 'operator', &lt;sqlalchemy.sql.operators.custom_op object at 0x10c730e20&gt;, 'type', (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,)),), '_label_style', &lt;SelectLabelStyle.LABEL_STYLE_DISAMBIGUATE_ONLY: 2&gt;, '_compile_options', (&lt;class 'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'&gt;, ())), (), False, False) SELECT %(param_1)s + %(param_2)s AS anon_1
(&lt;sqlalchemy.dialects.postgresql.psycopg2.PGDialect_psycopg2 object at 0x10c5a9250&gt;, ('0', &lt;class 'sqlalchemy.sql.selectable.Select'&gt;, '_raw_columns', (('1', &lt;class 'sqlalchemy.sql.elements.BinaryExpression'&gt;, 'left', ('2', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '3', False), 'right', ('4', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '5', False), 'operator', &lt;sqlalchemy.sql.operators.custom_op object at 0x10c731360&gt;, 'type', (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,)),), '_label_style', &lt;SelectLabelStyle.LABEL_STYLE_DISAMBIGUATE_ONLY: 2&gt;, '_compile_options', (&lt;class 'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'&gt;, ())), (), False, False) SELECT %(param_1)s + %(param_2)s AS anon_1
(&lt;sqlalchemy.dialects.postgresql.psycopg2.PGDialect_psycopg2 object at 0x10c5a9250&gt;, ('0', &lt;class 'sqlalchemy.sql.selectable.Select'&gt;, '_raw_columns', (('1', &lt;class 'sqlalchemy.sql.elements.BinaryExpression'&gt;, 'left', ('2', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '3', False), 'right', ('4', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '5', False), 'operator', &lt;sqlalchemy.sql.operators.custom_op object at 0x10c7320e0&gt;, 'type', (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,)),), '_label_style', &lt;SelectLabelStyle.LABEL_STYLE_DISAMBIGUATE_ONLY: 2&gt;, '_compile_options', (&lt;class 'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'&gt;, ())), (), False, False) SELECT %(param_1)s + %(param_2)s AS anon_1
(&lt;sqlalchemy.dialects.postgresql.psycopg2.PGDialect_psycopg2 object at 0x10c5a9250&gt;, ('0', &lt;class 'sqlalchemy.sql.selectable.Select'&gt;, '_raw_columns', (('1', &lt;class 'sqlalchemy.sql.elements.BinaryExpression'&gt;, 'left', ('2', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '3', False), 'right', ('4', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '5', False), 'operator', &lt;sqlalchemy.sql.operators.custom_op object at 0x10c732bc0&gt;, 'type', (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,)),), '_label_style', &lt;SelectLabelStyle.LABEL_STYLE_DISAMBIGUATE_ONLY: 2&gt;, '_compile_options', (&lt;class 'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'&gt;, ())), (), False, False) SELECT %(param_1)s + %(param_2)s AS anon_1
(&lt;sqlalchemy.dialects.postgresql.psycopg2.PGDialect_psycopg2 object at 0x10c5a9250&gt;, ('0', &lt;class 'sqlalchemy.sql.selectable.Select'&gt;, '_raw_columns', (('1', &lt;class 'sqlalchemy.sql.elements.BinaryExpression'&gt;, 'left', ('2', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '3', False), 'right', ('4', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '5', False), 'operator', &lt;sqlalchemy.sql.operators.custom_op object at 0x10c733040&gt;, 'type', (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,)),), '_label_style', &lt;SelectLabelStyle.LABEL_STYLE_DISAMBIGUATE_ONLY: 2&gt;, '_compile_options', (&lt;class 'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'&gt;, ())), (), False, False) SELECT %(param_1)s + %(param_2)s AS anon_1
(&lt;sqlalchemy.dialects.postgresql.psycopg2.PGDialect_psycopg2 object at 0x10c5a9250&gt;, ('0', &lt;class 'sqlalchemy.sql.selectable.Select'&gt;, '_raw_columns', (('1', &lt;class 'sqlalchemy.sql.elements.BinaryExpression'&gt;, 'left', ('2', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '3', False), 'right', ('4', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '5', False), 'operator', &lt;sqlalchemy.sql.operators.custom_op object at 0x10c733220&gt;, 'type', (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,)),), '_label_style', &lt;SelectLabelStyle.LABEL_STYLE_DISAMBIGUATE_ONLY: 2&gt;, '_compile_options', (&lt;class 'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'&gt;, ())), (), False, False) SELECT %(param_1)s + %(param_2)s AS anon_1
(&lt;sqlalchemy.dialects.postgresql.psycopg2.PGDialect_psycopg2 object at 0x10c5a9250&gt;, ('0', &lt;class 'sqlalchemy.sql.selectable.Select'&gt;, '_raw_columns', (('1', &lt;class 'sqlalchemy.sql.elements.BinaryExpression'&gt;, 'left', ('2', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '3', False), 'right', ('4', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '5', False), 'operator', &lt;sqlalchemy.sql.operators.custom_op object at 0x10c733400&gt;, 'type', (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,)),), '_label_style', &lt;SelectLabelStyle.LABEL_STYLE_DISAMBIGUATE_ONLY: 2&gt;, '_compile_options', (&lt;class 'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'&gt;, ())), (), False, False) SELECT %(param_1)s + %(param_2)s AS anon_1
(&lt;sqlalchemy.dialects.postgresql.psycopg2.PGDialect_psycopg2 object at 0x10c5a9250&gt;, ('0', &lt;class 'sqlalchemy.sql.selectable.Select'&gt;, '_raw_columns', (('1', &lt;class 'sqlalchemy.sql.elements.BinaryExpression'&gt;, 'left', ('2', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '3', False), 'right', ('4', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '5', False), 'operator', &lt;sqlalchemy.sql.operators.custom_op object at 0x10c7335e0&gt;, 'type', (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,)),), '_label_style', &lt;SelectLabelStyle.LABEL_STYLE_DISAMBIGUATE_ONLY: 2&gt;, '_compile_options', (&lt;class 'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'&gt;, ())), (), False, False) SELECT %(param_1)s + %(param_2)s AS anon_1
(&lt;sqlalchemy.dialects.postgresql.psycopg2.PGDialect_psycopg2 object at 0x10c5a9250&gt;, ('0', &lt;class 'sqlalchemy.sql.selectable.Select'&gt;, '_raw_columns', (('1', &lt;class 'sqlalchemy.sql.elements.BinaryExpression'&gt;, 'left', ('2', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '3', False), 'right', ('4', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '5', False), 'operator', &lt;sqlalchemy.sql.operators.custom_op object at 0x10c7337c0&gt;, 'type', (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,)),), '_label_style', &lt;SelectLabelStyle.LABEL_STYLE_DISAMBIGUATE_ONLY: 2&gt;, '_compile_options', (&lt;class 'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'&gt;, ())), (), False, False) SELECT %(param_1)s + %(param_2)s AS anon_1
(&lt;sqlalchemy.dialects.postgresql.psycopg2.PGDialect_psycopg2 object at 0x10c5a9250&gt;, ('0', &lt;class 'sqlalchemy.sql.selectable.Select'&gt;, '_raw_columns', (('1', &lt;class 'sqlalchemy.sql.elements.BinaryExpression'&gt;, 'left', ('2', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '3', False), 'right', ('4', &lt;class 'sqlalchemy.sql.elements.BindParameter'&gt;, (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,), '5', False), 'operator', &lt;sqlalchemy.sql.operators.custom_op object at 0x10c7339a0&gt;, 'type', (&lt;class 'sqlalchemy.sql.sqltypes.Integer'&gt;,)),), '_label_style', &lt;SelectLabelStyle.LABEL_STYLE_DISAMBIGUATE_ONLY: 2&gt;, '_compile_options', (&lt;class 'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'&gt;, ())), (), False, False) SELECT %(param_1)s + %(param_2)s AS anon_1
"><pre class="notranslate"><span class="pl-c1">10</span>
(<span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">dialects</span>.<span class="pl-s1">postgresql</span>.<span class="pl-s1">psycopg2</span>.<span class="pl-v">PGDialect_psycopg2</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c5a9250</span><span class="pl-c1">&gt;</span>, (<span class="pl-s">'0'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.Select'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_raw_columns'</span>, ((<span class="pl-s">'1'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BinaryExpression'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'left'</span>, (<span class="pl-s">'2'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'3'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'right'</span>, (<span class="pl-s">'4'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'5'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'operator'</span>, <span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">sql</span>.<span class="pl-s1">operators</span>.<span class="pl-s1">custom_op</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c730e20</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'type'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,)),), <span class="pl-s">'_label_style'</span>, <span class="pl-c1">&lt;</span><span class="pl-v">SelectLabelStyle</span>.<span class="pl-v">LABEL_STYLE_DISAMBIGUATE_ONLY</span>: <span class="pl-c1">2</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_compile_options'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'</span><span class="pl-c1">&gt;</span>, ())), (), <span class="pl-c1">False</span>, <span class="pl-c1">False</span>) <span class="pl-v">SELECT</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_1</span>)<span class="pl-s1">s</span> <span class="pl-c1">+</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_2</span>)<span class="pl-s1">s</span> <span class="pl-v">AS</span> <span class="pl-s1">anon_1</span>
(<span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">dialects</span>.<span class="pl-s1">postgresql</span>.<span class="pl-s1">psycopg2</span>.<span class="pl-v">PGDialect_psycopg2</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c5a9250</span><span class="pl-c1">&gt;</span>, (<span class="pl-s">'0'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.Select'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_raw_columns'</span>, ((<span class="pl-s">'1'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BinaryExpression'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'left'</span>, (<span class="pl-s">'2'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'3'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'right'</span>, (<span class="pl-s">'4'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'5'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'operator'</span>, <span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">sql</span>.<span class="pl-s1">operators</span>.<span class="pl-s1">custom_op</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c731360</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'type'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,)),), <span class="pl-s">'_label_style'</span>, <span class="pl-c1">&lt;</span><span class="pl-v">SelectLabelStyle</span>.<span class="pl-v">LABEL_STYLE_DISAMBIGUATE_ONLY</span>: <span class="pl-c1">2</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_compile_options'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'</span><span class="pl-c1">&gt;</span>, ())), (), <span class="pl-c1">False</span>, <span class="pl-c1">False</span>) <span class="pl-v">SELECT</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_1</span>)<span class="pl-s1">s</span> <span class="pl-c1">+</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_2</span>)<span class="pl-s1">s</span> <span class="pl-v">AS</span> <span class="pl-s1">anon_1</span>
(<span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">dialects</span>.<span class="pl-s1">postgresql</span>.<span class="pl-s1">psycopg2</span>.<span class="pl-v">PGDialect_psycopg2</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c5a9250</span><span class="pl-c1">&gt;</span>, (<span class="pl-s">'0'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.Select'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_raw_columns'</span>, ((<span class="pl-s">'1'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BinaryExpression'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'left'</span>, (<span class="pl-s">'2'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'3'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'right'</span>, (<span class="pl-s">'4'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'5'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'operator'</span>, <span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">sql</span>.<span class="pl-s1">operators</span>.<span class="pl-s1">custom_op</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c7320e0</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'type'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,)),), <span class="pl-s">'_label_style'</span>, <span class="pl-c1">&lt;</span><span class="pl-v">SelectLabelStyle</span>.<span class="pl-v">LABEL_STYLE_DISAMBIGUATE_ONLY</span>: <span class="pl-c1">2</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_compile_options'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'</span><span class="pl-c1">&gt;</span>, ())), (), <span class="pl-c1">False</span>, <span class="pl-c1">False</span>) <span class="pl-v">SELECT</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_1</span>)<span class="pl-s1">s</span> <span class="pl-c1">+</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_2</span>)<span class="pl-s1">s</span> <span class="pl-v">AS</span> <span class="pl-s1">anon_1</span>
(<span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">dialects</span>.<span class="pl-s1">postgresql</span>.<span class="pl-s1">psycopg2</span>.<span class="pl-v">PGDialect_psycopg2</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c5a9250</span><span class="pl-c1">&gt;</span>, (<span class="pl-s">'0'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.Select'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_raw_columns'</span>, ((<span class="pl-s">'1'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BinaryExpression'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'left'</span>, (<span class="pl-s">'2'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'3'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'right'</span>, (<span class="pl-s">'4'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'5'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'operator'</span>, <span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">sql</span>.<span class="pl-s1">operators</span>.<span class="pl-s1">custom_op</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c732bc0</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'type'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,)),), <span class="pl-s">'_label_style'</span>, <span class="pl-c1">&lt;</span><span class="pl-v">SelectLabelStyle</span>.<span class="pl-v">LABEL_STYLE_DISAMBIGUATE_ONLY</span>: <span class="pl-c1">2</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_compile_options'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'</span><span class="pl-c1">&gt;</span>, ())), (), <span class="pl-c1">False</span>, <span class="pl-c1">False</span>) <span class="pl-v">SELECT</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_1</span>)<span class="pl-s1">s</span> <span class="pl-c1">+</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_2</span>)<span class="pl-s1">s</span> <span class="pl-v">AS</span> <span class="pl-s1">anon_1</span>
(<span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">dialects</span>.<span class="pl-s1">postgresql</span>.<span class="pl-s1">psycopg2</span>.<span class="pl-v">PGDialect_psycopg2</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c5a9250</span><span class="pl-c1">&gt;</span>, (<span class="pl-s">'0'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.Select'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_raw_columns'</span>, ((<span class="pl-s">'1'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BinaryExpression'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'left'</span>, (<span class="pl-s">'2'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'3'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'right'</span>, (<span class="pl-s">'4'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'5'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'operator'</span>, <span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">sql</span>.<span class="pl-s1">operators</span>.<span class="pl-s1">custom_op</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c733040</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'type'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,)),), <span class="pl-s">'_label_style'</span>, <span class="pl-c1">&lt;</span><span class="pl-v">SelectLabelStyle</span>.<span class="pl-v">LABEL_STYLE_DISAMBIGUATE_ONLY</span>: <span class="pl-c1">2</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_compile_options'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'</span><span class="pl-c1">&gt;</span>, ())), (), <span class="pl-c1">False</span>, <span class="pl-c1">False</span>) <span class="pl-v">SELECT</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_1</span>)<span class="pl-s1">s</span> <span class="pl-c1">+</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_2</span>)<span class="pl-s1">s</span> <span class="pl-v">AS</span> <span class="pl-s1">anon_1</span>
(<span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">dialects</span>.<span class="pl-s1">postgresql</span>.<span class="pl-s1">psycopg2</span>.<span class="pl-v">PGDialect_psycopg2</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c5a9250</span><span class="pl-c1">&gt;</span>, (<span class="pl-s">'0'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.Select'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_raw_columns'</span>, ((<span class="pl-s">'1'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BinaryExpression'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'left'</span>, (<span class="pl-s">'2'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'3'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'right'</span>, (<span class="pl-s">'4'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'5'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'operator'</span>, <span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">sql</span>.<span class="pl-s1">operators</span>.<span class="pl-s1">custom_op</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c733220</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'type'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,)),), <span class="pl-s">'_label_style'</span>, <span class="pl-c1">&lt;</span><span class="pl-v">SelectLabelStyle</span>.<span class="pl-v">LABEL_STYLE_DISAMBIGUATE_ONLY</span>: <span class="pl-c1">2</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_compile_options'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'</span><span class="pl-c1">&gt;</span>, ())), (), <span class="pl-c1">False</span>, <span class="pl-c1">False</span>) <span class="pl-v">SELECT</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_1</span>)<span class="pl-s1">s</span> <span class="pl-c1">+</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_2</span>)<span class="pl-s1">s</span> <span class="pl-v">AS</span> <span class="pl-s1">anon_1</span>
(<span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">dialects</span>.<span class="pl-s1">postgresql</span>.<span class="pl-s1">psycopg2</span>.<span class="pl-v">PGDialect_psycopg2</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c5a9250</span><span class="pl-c1">&gt;</span>, (<span class="pl-s">'0'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.Select'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_raw_columns'</span>, ((<span class="pl-s">'1'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BinaryExpression'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'left'</span>, (<span class="pl-s">'2'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'3'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'right'</span>, (<span class="pl-s">'4'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'5'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'operator'</span>, <span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">sql</span>.<span class="pl-s1">operators</span>.<span class="pl-s1">custom_op</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c733400</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'type'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,)),), <span class="pl-s">'_label_style'</span>, <span class="pl-c1">&lt;</span><span class="pl-v">SelectLabelStyle</span>.<span class="pl-v">LABEL_STYLE_DISAMBIGUATE_ONLY</span>: <span class="pl-c1">2</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_compile_options'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'</span><span class="pl-c1">&gt;</span>, ())), (), <span class="pl-c1">False</span>, <span class="pl-c1">False</span>) <span class="pl-v">SELECT</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_1</span>)<span class="pl-s1">s</span> <span class="pl-c1">+</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_2</span>)<span class="pl-s1">s</span> <span class="pl-v">AS</span> <span class="pl-s1">anon_1</span>
(<span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">dialects</span>.<span class="pl-s1">postgresql</span>.<span class="pl-s1">psycopg2</span>.<span class="pl-v">PGDialect_psycopg2</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c5a9250</span><span class="pl-c1">&gt;</span>, (<span class="pl-s">'0'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.Select'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_raw_columns'</span>, ((<span class="pl-s">'1'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BinaryExpression'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'left'</span>, (<span class="pl-s">'2'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'3'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'right'</span>, (<span class="pl-s">'4'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'5'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'operator'</span>, <span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">sql</span>.<span class="pl-s1">operators</span>.<span class="pl-s1">custom_op</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c7335e0</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'type'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,)),), <span class="pl-s">'_label_style'</span>, <span class="pl-c1">&lt;</span><span class="pl-v">SelectLabelStyle</span>.<span class="pl-v">LABEL_STYLE_DISAMBIGUATE_ONLY</span>: <span class="pl-c1">2</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_compile_options'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'</span><span class="pl-c1">&gt;</span>, ())), (), <span class="pl-c1">False</span>, <span class="pl-c1">False</span>) <span class="pl-v">SELECT</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_1</span>)<span class="pl-s1">s</span> <span class="pl-c1">+</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_2</span>)<span class="pl-s1">s</span> <span class="pl-v">AS</span> <span class="pl-s1">anon_1</span>
(<span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">dialects</span>.<span class="pl-s1">postgresql</span>.<span class="pl-s1">psycopg2</span>.<span class="pl-v">PGDialect_psycopg2</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c5a9250</span><span class="pl-c1">&gt;</span>, (<span class="pl-s">'0'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.Select'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_raw_columns'</span>, ((<span class="pl-s">'1'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BinaryExpression'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'left'</span>, (<span class="pl-s">'2'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'3'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'right'</span>, (<span class="pl-s">'4'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'5'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'operator'</span>, <span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">sql</span>.<span class="pl-s1">operators</span>.<span class="pl-s1">custom_op</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c7337c0</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'type'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,)),), <span class="pl-s">'_label_style'</span>, <span class="pl-c1">&lt;</span><span class="pl-v">SelectLabelStyle</span>.<span class="pl-v">LABEL_STYLE_DISAMBIGUATE_ONLY</span>: <span class="pl-c1">2</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_compile_options'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'</span><span class="pl-c1">&gt;</span>, ())), (), <span class="pl-c1">False</span>, <span class="pl-c1">False</span>) <span class="pl-v">SELECT</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_1</span>)<span class="pl-s1">s</span> <span class="pl-c1">+</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_2</span>)<span class="pl-s1">s</span> <span class="pl-v">AS</span> <span class="pl-s1">anon_1</span>
(<span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">dialects</span>.<span class="pl-s1">postgresql</span>.<span class="pl-s1">psycopg2</span>.<span class="pl-v">PGDialect_psycopg2</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c5a9250</span><span class="pl-c1">&gt;</span>, (<span class="pl-s">'0'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.Select'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_raw_columns'</span>, ((<span class="pl-s">'1'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BinaryExpression'</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'left'</span>, (<span class="pl-s">'2'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'3'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'right'</span>, (<span class="pl-s">'4'</span>,<span class="pl-s1"></span> <span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.elements.BindParameter'</span><span class="pl-c1">&gt;</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,), <span class="pl-s">'5'</span>, <span class="pl-c1">False</span>), <span class="pl-s">'operator'</span>, <span class="pl-c1">&lt;</span><span class="pl-s1">sqlalchemy</span>.<span class="pl-s1">sql</span>.<span class="pl-s1">operators</span>.<span class="pl-s1">custom_op</span> <span class="pl-s1">object</span> <span class="pl-s1">at</span> <span class="pl-c1">0x10c7339a0</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'type'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.sqltypes.Integer'</span><span class="pl-c1">&gt;</span>,)),), <span class="pl-s">'_label_style'</span>, <span class="pl-c1">&lt;</span><span class="pl-v">SelectLabelStyle</span>.<span class="pl-v">LABEL_STYLE_DISAMBIGUATE_ONLY</span>: <span class="pl-c1">2</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'_compile_options'</span>, (<span class="pl-s1"></span><span class="pl-c1">&lt;</span><span class="pl-s1">class</span> <span class="pl-s">'sqlalchemy.sql.selectable.SelectState.default_select_compile_options'</span><span class="pl-c1">&gt;</span>, ())), (), <span class="pl-c1">False</span>, <span class="pl-c1">False</span>) <span class="pl-v">SELECT</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_1</span>)<span class="pl-s1">s</span> <span class="pl-c1">+</span> <span class="pl-c1">%</span>(<span class="pl-s1">param_2</span>)<span class="pl-s1">s</span> <span class="pl-v">AS</span> <span class="pl-s1">anon_1</span></pre></div>
<h3 dir="auto">Additional context</h3>
<p dir="auto"><em>No response</em></p>
<p dir="auto"><strong>Migrated issue, originally created by Marcin Lulek (<a href="https://github.com/ergo">@ergo</a>)</strong></p>
<p dir="auto">Hello,</p>
<p dir="auto">I'm not sure if I was always using SA in wrong way or there is a bug in 1.2 version.</p>
<p dir="auto">Setters need to be named same way as hybrid property - this test case works in 1.x and breaks in 1.2. I did notice that in the examples in docs the property name is same in both places, though.</p>
<p dir="auto">Error I'm getting is:</p>
<p dir="auto">File "/home/ergo/workspace/ziggurat_cms/.venv/lib/python3.6/site-packages/sqlalchemy/ext/hybrid.py", line 873, in <strong>set</strong><br>
raise AttributeError("can't set attribute")<br>
AttributeError: can't set attribute</p>
<hr>
<p dir="auto">Attachments: <a href="../wiki/imported_issue_attachments/4149/test_hybrid.py">test_hybrid.py</a></p>