Переписать запрос SQLAlchemy перед отправкой в ​​движок - PullRequest
0 голосов
/ 25 сентября 2019

Можно ли переписать окончательные скомпилированные необработанные байты запроса перед их отправкой в ​​базовый механизм базы данных?Я посмотрел на API событий, но, похоже, он не раскрывает такие низкоуровневые события.

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

/* {"trace_id":"1234","client_ip":"1.2.3.4", ...} */ SELECT ...

Данные извлекаются из журналов запросов базы данных и используются для корреляции событий с другими службами в стеке.

1 Ответ

2 голосов
/ 25 сентября 2019

Просто используйте событие before_cursor_execute с retval=True, как показано в https://github.com/sqlalchemy/sqlalchemy/wiki/Profiling

@event.listens_for(Engine, "before_cursor_execute", retval=True)
def before_cursor_execute(conn, cursor, statement,
    parameters, context, executemany):
  statement = "/* {} */ {}".format(
    json.dumps({
      "trace_id": "1234",
      "client_ip": "1.2.3.4",
    }),
    statement
  )
  return statement, parameters
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...