用remote_api来远程访问GAE的数据库

标签:Google App Engine, Python

昨天在GAE的官方博客上看到《Accessing the datastore remotely with remote_api》这篇文章,由于上班太忙,于是推到现在才看。

GAE SDK 1.1.9推出之前,GAE的数据库只能在GAE和控制面板里访问,现在多了个新的选择,可以直接远程访问了。

按照文章所说,你首先要在app.yaml中添加下面的handler,并更新应用程序:
handlers:
    - url: /remote_api
      script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
      login: admin 
其中的/remote_api请按情况修改,最好不要让别人知道你的后门。

接着在你要操作的应用程序下创建一个__init__.py文件。
这个文件只要把你所要用到的数据模型import进来,或者copy进来即可。

然后创建如下的程序:
import code
import getpass
import sys

sys.path.append("~/google_appengine")
# 如果是Windows操作系统,请写类似下面的路径:
# sys.path.append(r"E:\google_appengine")
# sys.path.append(r"E:\google_appengine\lib\yaml\lib")

from google.appengine.ext.remote_api import remote_api_stub
from google.appengine.ext import db

# import 你的应用程序文件夹的名字

def auth_func():
  return raw_input('Username:'), getpass.getpass('Password:')

if len(sys.argv) < 2:
  print "Usage: %s app_id [host]" % (sys.argv[0],)
app_id = sys.argv[1]
if len(sys.argv) > 2:
  host = sys.argv[2]
else:
  host = '%s.appspot.com' % app_id

remote_api_stub.ConfigureRemoteDatastore(app_id, '/remote_api', auth_func, host)

code.interact('App Engine interactive console for %s' % (app_id,), None, locals())
最后用下面这句命令运行这个程序(假设程序名为appengine_console.py),就能访问数据库了。
python appengine_console.py 你的应用程序名
访问时会要求提供用户名和密码,注意用户名是不含@gmail.com的。

文章下面还讲述了怎么封装这种数据库操作,这里就不再贴出了。

注意这种方式的限制:
  1. 优先级最低,不会影响网站的正常访问。
  2. 访问计算在配额内(HTTP方式)。
  3. API仍然有1MB的限制。

0条评论 你不来一发么↓

    想说点什么呢?