处理数据库重启时烧瓶app的崩溃

时间:2013-06-08 22:53:30

标签: postgresql flask psycopg2

当我执行postgres数据库重启时,当前已经使一个烧瓶应用程序崩溃,因为打开的光标是陈旧的...

我该如何处理这种情况。目前通过psycopg2将烧瓶应用程序连接到postgres ....

我不是数据库专家......

  Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1701, in __call__
    return self.wsgi_app(environ, start_response)
  File "/var/www/flaskapps/capp/override.py", line 15, in __call__
    return self.app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1689, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1687, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1360, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1356, in full_dispatch_request
    rv = self.preprocess_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1539, in preprocess_request
    rv = func()
  File "/usr/local/lib/python2.7/dist-packages/flask_login.py", line 321, in _load_user
    self.reload_user()
  File "/usr/local/lib/python2.7/dist-packages/flask_login.py", line 350, in reload_user
    user = self.user_callback(user_id)
  File "/var/www/flaskapps/capp/login_setup.py", line 163, in load_user
    cursor.execute(qstr)
  File "/usr/share/pyshared/psycopg2/extras.py", line 123, in execute
    return _cursor.execute(self, query, vars)
InterfaceError: cursor already closed

1 个答案:

答案 0 :(得分:1)

这是您的代码需要检测瞬态故障并重新尝试事务的许多情况之一,必要时重新打开连接。

其他情况包括死锁和序列化失败。

异常上的sqlstate将让您确定要重试的错误情况以及方式。有关sqlstate代码含义的指导,请参阅the PostgreSQL documentation on error codes

有时候你的数据库接口会通过一个类型化的异常,它也可以通过它的数据类型告诉你。这看起来不像其中一种情况。