Как получить план объяснения в Oracle, используя SQLAlchemy ORM - PullRequest
0 голосов
/ 18 сентября 2018

Используя SQLAlchemy ORM, я хотел бы получить план объяснения для запроса Oracle.

Это будет сделано в sqlplus, используя 2 шага, которые выглядят примерно так:

# step 1  
explain plan for select * from table_xyz;

# step 2
select * from table(dbms_xplan.display(null, null, 'SERIAL'));

До сих пор я безуспешно пытался с SQLAlchemy ORM выполнить следующее:

from sqlalchemy import create_engine, Table
from sqlalchemy.orm import sessionmaker
import os

# create engine
user, pswd = (os.environ['USER'], os.environ['PW'])
conn_str = f'oracle://{user}:{pswd}@myDbService'
engine =  create_engine(conn_str, echo=True)

# create session
Session = sessionmaker(bind=engine)

# reflect existing table
MyTable = Table('my_table', meta, autoload=True, autoload_with=engine, schema='myschema')

# generate query
bind_param = dict('state_cd'=['CA', 'WA'])
query = str(Session().query(MyTable).filter(MyTable.c.my_state_cd.in_(state_cd)))
# print(query) # <-- this returns a properly formulated select query with bound parameters
result = Session().execute('EXPLAIN PLAN FOR ' + query, bind_param)

Выполнение последней строки выше не удается со следующей ошибкой, и я не уверен, что делаю неправильно:

StatementError: (sqlalchemy.exc.InvalidRequestError) A value is required for bind parameter 'my_state_cd_2'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...