В частном случае oursql ,
with some_connection.cursor() as cursor:
do_something_with(cursor)
эквивалентно
cursor = some_connection.cursor()
try:
do_something_with(cursor)
except:
some_connection.rollback()
raise
else:
some_connection.commit()
finally:
cursor.close()
Как вы можете видеть, зависит то, что делает оператор with
в диспетчере контекста (например, some_connection.cursor () `).
with connection.cursor() as cursor:
try:
cursor.execute('some query')
except IntegrityError as e:
# handle exception
может или не может быть правильным способом обработки IntegrityError
- вы можете захотеть обработать IntegrityError в некоторой внешней области видимости.
Например, если у вас есть какая-то общая функция, которая регистрирует запросы, такие как
def log_query(query):
logger.info(query)
with connection.cursor() as cursor:
cursor.execute(query)
try:
log_query(query)
except IntegrityError as err:
# handler error
, вы можете не захотеть обрабатывать IntegrityError
s внутри log_query, а скорее на более позднем этапе.