Google App Engine python + Google Cloud SQL 中的数据库连接如何工作?
How do database connections work in Google App Engine python + Google Cloud SQL?
我在 Google App Engine(灵活)上有一个正在运行的 Python 3 应用程序连接到 Google Cloud SQL 上的 Postgres。我通过 following the docs 让它工作,在某些时候你可以通过 psycopg2 连接到这样的数据库说明符
postgresql://postgres:password@/dbname?host=/cloudsql/project:us-central1:dbhost
我正在尝试了解主机名 /cloudsql/project:us-central1:dbhost
的工作原理。 Google 称其为 "instance connection string" 并且它确实看起来像是在扮演常规主机名的角色。只有 /
和 :
它不是 DNS 解析器的有效名称。
Google 的灵活 Python 环境是否以某种方式修改以支持像这样的特殊主机名?它看起来像 stock Python 3 和 psycopg2,但也许它以某种方式被修改了?如果是这样,这些修改是否记录在任何地方? docs for the Python runtime 对此一无所知。
原来host=/cloudsql/project:us-central1:dbhost
指定了文件系统中目录的名称。在该目录中有一个名为 .s.PGSQL.5432
的文件,它是一个 Unix 域套接字。 Cloud SQL Proxy is listening on that Unix domain socket and forwarding database requests via TCP to the actual database server. Despite the DB connection string being host=
it actually names a directory with a Unix socket in it; that's a feature of libpq 的实例,Postgres 连接库。
非常感谢 Vadim 在评论中快速回答我的问题,只是在这里为未来的读者写下更完整的答案。
我在 Google App Engine(灵活)上有一个正在运行的 Python 3 应用程序连接到 Google Cloud SQL 上的 Postgres。我通过 following the docs 让它工作,在某些时候你可以通过 psycopg2 连接到这样的数据库说明符
postgresql://postgres:password@/dbname?host=/cloudsql/project:us-central1:dbhost
我正在尝试了解主机名 /cloudsql/project:us-central1:dbhost
的工作原理。 Google 称其为 "instance connection string" 并且它确实看起来像是在扮演常规主机名的角色。只有 /
和 :
它不是 DNS 解析器的有效名称。
Google 的灵活 Python 环境是否以某种方式修改以支持像这样的特殊主机名?它看起来像 stock Python 3 和 psycopg2,但也许它以某种方式被修改了?如果是这样,这些修改是否记录在任何地方? docs for the Python runtime 对此一无所知。
原来host=/cloudsql/project:us-central1:dbhost
指定了文件系统中目录的名称。在该目录中有一个名为 .s.PGSQL.5432
的文件,它是一个 Unix 域套接字。 Cloud SQL Proxy is listening on that Unix domain socket and forwarding database requests via TCP to the actual database server. Despite the DB connection string being host=
it actually names a directory with a Unix socket in it; that's a feature of libpq 的实例,Postgres 连接库。
非常感谢 Vadim 在评论中快速回答我的问题,只是在这里为未来的读者写下更完整的答案。