谷歌云-使用python连接到同一项目中的postgresql数据库

谷歌云-使用python连接到同一项目中的postgresql数据库,python,postgresql,google-app-engine,Python,Postgresql,Google App Engine,tl;医生: 如何从同一“项目”中的gce实例连接到postgres db,而不授予对35.185.* ======== 你好, 我有一个非常简单的本地测试脚本: print "importing" import pandas as pd import urllib import json from sqlalchemy import * from sqlalchemy import create_engine from sqlalchemy import Table, Column, Int

tl;医生: 如何从同一“项目”中的gce实例连接到postgres db,而不授予对
35.185.*

========

你好,

我有一个非常简单的本地测试脚本:

print "importing"
import pandas as  pd
import urllib
import json
from sqlalchemy import *
from sqlalchemy import create_engine
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
print "done importing"
conn_string = 'postgresql://my_user:my_pass@ip.of.my.db/postgres'
print "connecting"
engine = create_engine(conn_string, echo=True)
print "engine created"
engine.connect()
print "engine connected"

print "getting data"
data=json.loads(urllib.urlopen("http://ip.jsontest.com").read())
df=pd.DataFrame([data])
print "data retrieved"
df.to_sql('insert_test',engine, index=False, schema='public', chunksize=500,
                                  if_exists='append')
现在,这是有效的,因为我已明确授予对我的IP数据库的访问权:

我的输出是:

importing
done importing
connecting
engine created
2017-04-14 10:17:38,319 INFO sqlalchemy.engine.base.Engine select version()
2017-04-14 10:17:38,323 INFO sqlalchemy.engine.base.Engine {}
2017-04-14 10:17:38,381 INFO sqlalchemy.engine.base.Engine select current_schema()
2017-04-14 10:17:38,385 INFO sqlalchemy.engine.base.Engine {}
2017-04-14 10:17:38,440 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
2017-04-14 10:17:38,447 INFO sqlalchemy.engine.base.Engine {}
2017-04-14 10:17:38,483 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
2017-04-14 10:17:38,490 INFO sqlalchemy.engine.base.Engine {}
2017-04-14 10:17:38,568 INFO sqlalchemy.engine.base.Engine show standard_conforming_strings
2017-04-14 10:17:38,575 INFO sqlalchemy.engine.base.Engine {}
engine connected
getting data
data retrieved
2017-04-14 10:17:38,750 INFO sqlalchemy.engine.base.Engine select relname from pg_class c join pg_namespace n on n.oid=c.relnamespace where n.nspname=%(schema)s and relname=%(name)s
2017-04-14 10:17:38,753 INFO sqlalchemy.engine.base.Engine {'name': u'insert_test', 'schema': u'public'}
2017-04-14 10:17:38,832 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2017-04-14 10:17:38,841 INFO sqlalchemy.engine.base.Engine INSERT INTO public.insert_test (ip) VALUES (%(ip)s)
2017-04-14 10:17:38,848 INFO sqlalchemy.engine.base.Engine {'ip': u'my_local_ip'}
2017-04-14 10:17:38,903 INFO sqlalchemy.engine.base.Engine COMMIT
当我将此脚本移动到我的gce实例并使用以下命令运行它时:

$ python hello_db.py
我的输出如下:

 File "/home/user/anaconda2/lib/python2.7/site-packages/psycopg2-2.7.1-py2.7-linux-x86_64.egg/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection timed out
        Is the server running on host "ip.of.my.db" and accepting
        TCP/IP connections on port 5432?
DB和计算引擎实例都是同一个“项目”的一部分

我可以看到我的实例IP是
35.185.foo.blah。无论什么
我都知道IP,因为我运行了:

wget "http://ip.jsontest.com"
考虑到我的实例的IP可能是动态的,因为我启动了许多实例来分发任务并使用云计算东西——我如何授予所有这些实例的访问权限

授予
35.185.*
似乎不安全,因为如果gce上的其他人试图进入我的数据库怎么办

我是新来的,也许我遗漏了什么——但我认为我的“项目”能够毫无问题地访问所有其他资产。我相信有一个伟大的理由,这不是这样的情况,但它是失去了我

是我解决这个问题需要阅读的文档