相关疑难解决方法(0)

在Google Cloud SQL(GAE)Python应用程序中管理数据库连接的好方法是什么?

我只是在学习Google App Engine,并试图想出一个很好的方法来管理我与Google Cloud SQL实例的数据库连接(如果你还没有使用GC-SQL,基本上,它是云中的MySQL,有一些限制).

我正在使用带有webapp2框架的python(2.7)GAE环境来处理请求.我知道常见问题解答说,建议每次请求都要与DB建立新的连接,但我不知道建议的关闭连接的方法是什么.每次我尝试在开发过程中删除表时,GC-SQL挂起并且"show processlist"显示有一堆进程(可能是因为我没有关闭数据库)并且其中一个正在等待锁定(可能是这个过程试图放弃表格).这很烦人,迫使我重新启动GC-SQL实例(比如重新启动mysql-server服务,我想).我还认为偶尔存在数据库打嗝,这与我没有真正关闭数据库连接这一事实有关.

那么,例如,我的webapp2.Requesthandler子类实例上是否应该有一个析构函数来断开与DB的连接?GAE对象有时似乎被缓存,所以这也是需要考虑的事情.我想我可以为每个查询连接/查询/断开连接,但这似乎不是最理想的.

我知道这是一个模糊的问题,但我希望在这个领域有所作为的人可以按我的方式提出一些提示.

提前致谢!

更新: 我尝试使用Shay的答案作为起点,围绕需要cursot的方法实现一个包装器.我收到了GAE错误.以下是一个特定于此的新问题:App Engine中Google Cloud SQL的连接限制是什么,以及如何最好地重用数据库连接?

python mysql google-app-engine webapp2 google-cloud-sql

10
推荐指数
2
解决办法
4225
查看次数

App Engine中的Google Cloud SQL有哪些连接限制,以及如何最好地重用数据库连接?

我有一个Google App Engine应用程序,它使用Google Cloud SQL实例存储数据.我需要我的实例能够通过休息调用一次为数百个客户端提供服务,每个客户端都会产生一个或几个数据库查询.我已经包装了需要DB访问的方法,并将句柄存储到os.environ中的DB连接.看看这个问题/答案基本上我是怎么做的.

但是,只要有几百个客户端连接到我的应用程序并触发数据库调用,我就会在Google App Engine错误日志中开始收到这些错误(当然,我的应用程序返回500):

could not connect: ApplicationError: 1033 Instance has too many concurrent requests: 100 Traceback (most recent call last): File "/base/python27_run
Run Code Online (Sandbox Code Playgroud)

Google App Engine和Google Cloud SQL的有经验用户提供的任何提示?提前致谢.

这是我使用需要DB连接的方法的装饰器的代码:

def with_db_cursor(do_commit = False):
    """ Decorator for managing DB connection by wrapping around web calls.
    Stores connections and open connection count in the os.environ dictionary
    between calls.  Sets a cursor variable in the wrapped function. Optionally
    does a commit.  Closes the cursor when wrapped method …
Run Code Online (Sandbox Code Playgroud)

python mysql google-app-engine wsgi google-cloud-sql

9
推荐指数
2
解决办法
6076
查看次数