ローカルのMySQLデータベースでCherryPy Webサーバー(Python 2.7)を使用しています。短いで は、新しいSQLクエリを実行するときに、いくつかの日後、私は次のエラーを取得する:CherryPy Pingデータベース接続または再接続
MySQL server has gone away
私はこの問題にはいくつかのソースを見つけることができますが、それらは実際にCherryPyには関係ありません。 CherryPyを再起動すると問題が解決されます。私は、CherryPyが接続を失い、再接続できないと思いますか?
したがって、私の質問は:
- はどのようにして、データベース接続を確認することができますし、それが生きていない場合は、再接続?または
- 上記のエラーを回避するにはどうすればよいですか?。以下で
、私が使用していますいくつかの単純化されたコードのバージョンを示しています。私は何もサーバー上で起こっていないいくつかの日後にインデックスページを訪問した場合
def dbconnect(thread_index):
"""
Creates a database connection for each thread that CherryPy creates
:param thread_index:
"""
cherrypy.thread_data.db = MySQLdb.connect("localhost", "user",
"password", "databasename")
class website(object):
@cherrypy.expose
def index(self):
c = cherrypy.thread_data.db.cursor()
c.execute("Select * from ATable")
(output,) = c.fetchone()
# generate some html output ...
cherrypy.engine.subscribe('start_thread', dbconnect)
website = website()
cherrypy.quickstart(website)
を今、インデックスメソッドがスローをMySQLサーバーが去りましたエラー。
うまくいけば、この質問は、CherryPyを使用している誰もが面白いかもしれないし、SQLエラーを1日受ける。 ありがとうございます:-)
私はリンクされたソリューションをしばらく試してみましたが、今のところすべてが動作します。クイックで汚れた解決策は、MySQLdb.OperationalErrorをキャッチし、dbconnectメソッドを再度呼び出して、現在のスレッドがデータベース接続を再開することです。 – PeteChro