Использование SQLAlchemy для запросов к базе данных MySQL я получаю следующее сообщение об ошибке:Игнорировать блокировку в базе данных MYSQL в SQLAlchemy Query
sqlalchemy.exc.OperationalError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely) (_mysql_exceptions.OperationalError) (1205, 'Lock wait timeout exceeded; try restarting transaction')
Первого, я полагаю, что сообщение об ошибке Комментарий к «рассмотреть вопрос об использовании session.no_autoflush блока если этот флеш происходит преждевременно »- это о том, что другой сеанс помещает блокировку, а не сеанс, который я использую для моего текущего запроса? Если бы я последовал этому совету, это поможет избежать блокировок в базе данных в целом? Во-вторых, мне нужно только читать и не нужно писать изменения в результатах запроса, поэтому я хотел бы знать, как игнорировать блокировку и просто читать то, что сейчас находится в базе данных. Я считаю, что sql - это NOWAIT, но я не вижу, как это сделать в API sqlalchemy.
Просьба представить операторы SQL (в обоих соединениях) и 'SHOW CREATE TABLE' и' SHOW ENGINE = InnoDB STATUS; '(если это возможно, когда проблема возникает). Из того, что вы предоставили, мы не можем сказать, почему это запирание, и многие другие важные детали. –
Также укажите информацию о «no_autoflush» sqlalchemy; нам нужно выяснить, какая конструкция MySQL находится под обложками. –
@RickJames нет SQL-конструкций underly [autoflush] (http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.params.autoflush). Это как сеанс SQLAlchemy обрабатывает состояние. Если у сеанса есть ожидающие изменения, которые еще не покраснели в БД (вставляет, обновляют, удаляют), он будет сбрасывать их в БД до запуска следующего запроса, если используется функция autoflush. Невозможно помочь OP без mcve, хотя что-то блокирует что-то и флеш, выпущенный до того, как какой-то запрос использует что-то заблокированное ... –