Hi, I'm using the following snippet to run explain analyize on raw sql 
(PostgreSQL, psycopg2).

def print_explain(engine, raw_sql, values):
    sql_text = text('EXPLAIN (ANALYZE, BUFFERS) ' + raw_sql)
    q = engine.execute(sql_text, values)
    lines = q.fetchall()
    print('--- EXPLAIN ANALYZE ---')
    for l in lines:
        print(l[0])
    print('--- EXPLAIN END     ---')


How can I make it work with Core statements? So far my best idea seems to 
be:

def print_explain_stmt(stmt):
    raw_sql = str(
        stmt.compile(dialect=postgresql.dialect(), compile_kwargs={
"literal_binds": True})
    )

    sql_text = text('EXPLAIN (ANALYZE, BUFFERS) ' + raw_sql)
    q = pg_engine.execute(sql_text)
    lines = q.fetchall()
    print('--- EXPLAIN ANALYZE ---')
    for l in lines:
        print(l[0])
    print('--- EXPLAIN END     ---')

But is this OK? I mean compiling the statement isn't really reliable for 
some column types. Can you make this function to use the stmt directly?

-- 
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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to