Как закрыть соединение с возвращаемым значением в PyMySQL lib? - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть следующий код:

import pymysql.cursors
class MylocalSQL:

    def __init__(self):
        pass

    def get_max_report_date(self):
        connection = pymysql.connect(host=...,
                                     charset='utf8mb4',
                                     cursorclass=pymysql.cursors.DictCursor)
        try:
            with connection.cursor() as cursor:
                # Read a single record
                sql = "SELECT value from tab limit 1 "
                cursor.execute(sql)
                result = cursor.fetchone()
                print(result)
        finally:
            connection.close()


if __name__ == '__main__':
    mysql = MylocalSQL()
    mysql.get_max_report_date()

Я хочу изменить print(result) на return, чтобы я мог сделать:

value = mysql.get_max_report_date()

Однако, если я изменю print(result) на return result, блок finally не будет выполнен.

Есть ли лучший способ управлять ошибками подключения и обработки, когда можно вернуть значение из запроса?

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Вы ошибаетесь в поведении ваще. Блок finally выполняется, даже если у вас есть оператор return.

class MylocalSQL:

    def __init__(self):
        pass

    def get_max_report_date(self):
        try:
            return "some value"
        finally:
            print('i was executed')


MylocalSQL().get_max_report_date()

печатает "Я был казнен"

https://ideone.com/KhvVKy

0 голосов
/ 11 ноября 2018

Создайте переменную раньше. Присвойте результат вашей переменной. Закройте соединение. Вернуть переменную.

...