В документации из execute
упоминается, что метод возвращает итератор с результатами для каждого запроса при multi=True
. Кажется, что запросы ничего не делают, пока итератор не будет обработан, независимо от commit()
. Однако операторы CREATE
не дают никаких результатов, и попытка перебрать возвращаемое значение execute
приводит к исключению: generator raised StopIteration
. Это связано с ошибкой в модуле коннектора и исправлено в версии 8.0.13 с поддержкой python 3.7.
Решение теперь состоит в том, чтобы всегда перебирать возвращаемое значение execute
, даже если никаких ожидаемых данных не ожидается, и обновлять соединительный модуль. Если обновление невозможно, можно отследить неудачную итерацию и продолжить.
Фиксированный код (включая часть для более ранних версий соединительного модуля) теперь выглядит примерно так:
try:
results = cursor.execute(script, multi=True)
try:
for result in results:
pass
except Exception as e:
pass
warnings = cursor.fetchwarnings()
if warnings:
for warning in warnings:
# handle warning
connection.commit()
cursor.close()
connection.close()
except mysql.connector.Error as err:
# handle error
Ну, вы можете сделать что-то вроде:
:match myBaseHighlight /foo/
:2match myGroup /./
где myBaseHighlight
определяется как ваш внешний вид по умолчанию - белый на черном или что-то еще. : match
переопределит : 2match
, поэтому все, кроме / foo /
, получит выделение myGroup
.