Я использую разъем 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.
Есть ли способ узнать, является ли соединение «живой», чтобы я мог перезапустить его?
Спасибо