FDB соединение на Python закрывается само - PullRequest
0 голосов
/ 26 марта 2020

Я использую разъем FireBird для Python в моем django приложении. У меня одно соединение на сеанс, чтобы минимизировать время загрузки и повысить эффективность, но всякий раз, когда соединение работает более 10 минут, оно само закрывается. Он заключен в кавычки, потому что он на самом деле не закрывается, объектное соединение все еще живо, а атрибут closed класса установлен в False. В этом состоянии всякий раз, когда вы пытаетесь выполнить запрос, и fdb.fbcore.DatabaseError генерируется.

Это мой класс соединителя, который я использую для создания соединения:

class DBConnector(object):

    def __init__(self):
        print("Init Connector")
        self.host = 'the_host'
        self.database = 'the_database'
        self.user = 'the_user'
        self.password = 'the_super_secret_and_secure_key'
        self.charset = 'the_most_common_charset'
        self.dbconn = None

    def create_connection(self):
        print("Creating Connection")
        connection = fdb.connect(
            host=self.host,
            database=self.database,
            user=self.user,
            password=self.password,
            charset=self.charset,
        )
        return connection

    def __enter__(self):
        self.dbconn = self.create_connection()
        return self.dbconn

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.dbconn.close()

Когда я делаю

con = DBConnector()
cursor = con.cursor()
cursor.execute(MY_SELECT)

Работает отлично. Теперь, если я оставлю соединение живым в течение более 10 минут и попытаюсь снова выполнить запрос:

cursor.execute(ANOTHER_SELECT)

Выдает

fdb.fbcore.DatabaseError: Error while preparing SQL statement:\n- SQLCODE: -902\n- Unable to complete network request to host .\n- Error writing data to the connection.

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

Спасибо

...