New Relic 便利ですが、フリートライアル期間が終わったらどこまで機能制限されるのかびくびくしてる azyobuzin です。
New Relic を導入してから MySQL-Pythonの正しい使い方 - アジョブジ星通信 の書き方をすると
Traceback (most recent call last):
File "/var/www/imgazyobuzi/api/api.py", line 160, in application return endpoint(request)
File "/var/www/imgazyobuzi/api/api.py", line 134, in all_sizes "full": resolver.get_full(match),
File "/var/www/imgazyobuzi/api/resolvers/hatena_fotolife.py", line 84, in get_full return self.work(match)["full"].replace(".flv", ".jpg")
File "/var/www/imgazyobuzi/api/resolvers/__init__.py", line 89, in work with self._connect_db() as cursor: #Connection.__enter__() で Cursor が返される
AttributeError: __exit__ というエラーが出るようになりました。仕方なく with を使わない書き方で応急処置したのですが、何としてでもかっこよく書きたかったので、何とかしました。
サクッと解決方法
New Relic の Python パッケージの newrelic/hooks/database_dbapi2.py とかいうモデュールで MySQLdb を上書きしているようなので、そこに __enter__ と __exit__ を追加すればいいわけです。
というわけで、 ConnectionWrapper クラスに
def __enter__(self): return self.cursor()
def __exit__(self, exc, value, tb):
if exc:
self.rollback()
else:
self.commit()を追加しておけば、完了です。
まったく、無駄なことしやがって。