我尝试在带Python2.7环境的App Engine标准上使用postgres。
我使用sqlalchemy + pg8000进行连接,连接字符串如下:
postgresql+pg8000://user:password@/dbname?unix_sock=/cloudsql/project:us-central1:db
它可以在本地计算机上运行,但是在部署它时会收到错误消息:
AttributeError: 'Connection' object has no attribute '_usock'
如何配置与数据库的连接?
完整追溯:
Traceback (most recent call last):
File "/base/alloc/tmpfs/dynamic_runtimes/python27g/e416f9a06334486a/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/base/alloc/tmpfs/dynamic_runtimes/python27g/e416f9a06334486a/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "/base/alloc/tmpfs/dynamic_runtimes/python27g/e416f9a06334486a/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/main.py", line 15, in <module>
db.engine.execute('select ')
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/engine/base.py", line 2074, in execute
connection = self.contextual_connect(close_with_result=True)
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/engine/base.py", line 2123, in contextual_connect
self._wrap_pool_connect(self.pool.connect, None),
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/engine/base.py", line 2158, in _wrap_pool_connect
return fn()
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/pool.py", line 400, in connect
return _ConnectionFairy._checkout(self)
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/pool.py", line 788, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/pool.py", line 529, in checkout
rec = pool._do_get()
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/pool.py", line 1193, in _do_get
self._dec_overflow()
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/util/langhelpers.py", line 66, in __exit__
compat.reraise(exc_type, exc_value, exc_tb)
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/pool.py", line 1190, in _do_get
return self._create_connection()
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/pool.py", line 347, in _create_connection
return _ConnectionRecord(self)
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/pool.py", line 474, in __init__
self.__connect(first_connect_check=True)
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/pool.py", line 671, in __connect
connection = pool._invoke_creator(self)
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/engine/strategies.py", line 106, in connect
return dialect.connect(*cargs, **cparams)
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/sqlalchemy/engine/default.py", line 412, in connect
return self.dbapi.connect(*cargs, **cparams)
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/pg8000/__init__.py", line 112, in connect
application_name, max_prepared_statements)
File "/base/data/home/apps/s~valid-song-196413/web-analytics-parser:20180926t131114.412842106933365078/lib/pg8000/core.py", line 1183, in __init__
self._usock.close()
AttributeError: 'Connection' object has no attribute '_usock'