У меня есть api, я написал в колбе. Он использует sqlalchemy для работы с базой данных mysql. Я не использую flask-sqlalchemy, потому что мне не нравится, как модуль заставляет вас в определенный шаблон для объявления модели.sqlalchemy mysql соединения не закрываются на колбе api
У меня возникла проблема, когда мои соединения с базой данных не закрываются. Объект, представляющий соединение, выходит за пределы области видимости, поэтому я предполагаю, что это сбор мусора. Я также явно вызываю close() в сеансе. Несмотря на эти факты, соединения остаются открытыми задолго до того, как ответ api вернул ответ.
sqlsession.py: Вот оболочка, которую я использую для сеанса.
class SqlSession:
def __init__(self, conn=Constants.Sql):
self.db = SqlSession.createEngine(conn)
Session = sessionmaker(bind=self.db)
self.session = Session()
@staticmethod
def createEngine(conn):
return create_engine(conn.URI.format(user=conn.USER, password=conn.PASS, host=conn.HOST, port=conn.PORT, database=conn.DATABASE, poolclass=NullPool))
def close(self):
self.session.close()
flaskroutes.py: Ниже приведен пример создания флеш-приложения и использования объекта-обертки. Обратите внимание, что он запускает его в начале в рамках вызова api, а затем закрывает сеанс в конце и предположительно представляет собой мусор, собранный после ответа ответа.
def commands(self, deviceId):
sqlSession = SqlSession(self.sessionType) <---
commandsQueued = getCommands()
jsonCommands = []
for command in commandsQueued:
jsonCommand = command.returnJsonObject()
jsonCommands.append(jsonCommand)
sqlSession.session.delete(command)
sqlSession.session.commit()
resp = jsonify({'commands': jsonCommands})
sqlSession.close() <---
resp.status_code = 200
return resp
Я бы ожидать, что соединения, которые будут очищены, как только ответ HTTP сделан, но вместо этого соединения в конечном итоге с «спящем» состоянии (если смотреть в командной MySQL строки интерфейса «SHOW PROCESSLIST») ,
Это не ответ, даже если он связан с одним. Поместите фактические данные о том, как вы решили свою проблему в самом ответе. – davidism
Благодарим вас за редактирование. Я также хотел бы получить лучший ответ на фляжку, иначе это будет всего лишь дубликат http://stackoverflow.com/questions/8645250/how-to-close-sqlalchemy-connection-in-mysql. – bufh