2017-11-01 6 views
0

SQLAlchemy에 의해 생성 된 SQL 쿼리를 저장하려고하는데, 각 쿼리가 실행되는 데 걸리는 시간. 나는 SQL 저장하는 이벤트 리스너를 사용하고 있습니다 :SQLAlchemy에서 생성 된 SQL 및 쿼리 실행 시간을 기록하려면 어떻게해야합니까?

statements = [] 

@listens_for(DBSession.get_bind(), "before_cursor_execute", named=True) 
def before_cursor_execute(**kw): 
    statements.append(kw['statement']) 

내가 실행 시간을 저장하기 위해 어떻게 든 같은 이벤트 리스너를 사용할 수를, 또는 나는 다른 것을 사용한다?

답변

1

당신은이 같은 다음, 쿼리의 시작 시간을 기록 after_cursor_execute의 차이를 계산하는 before_cursor_execute를 사용할 수 있습니다

@event.listens_for(engine, "before_cursor_execute") 
def _record_query_start(conn, cursor, statement, parameters, context, executemany): 
    conn.info["query_start"] = datetime.now() 

@event.listens_for(engine, "after_cursor_execute") 
def _calculate_query_run_time(conn, cursor, statement, parameters, context, executemany): 
    print("this query took {}".format(datetime.now() - conn.info["query_start"]))