Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在云函数中使用云SQL(Postgres)_Python_Postgresql_Google Cloud Functions_Psycopg2_Google Cloud Sql - Fatal编程技术网

Python 在云函数中使用云SQL(Postgres)

Python 在云函数中使用云SQL(Postgres),python,postgresql,google-cloud-functions,psycopg2,google-cloud-sql,Python,Postgresql,Google Cloud Functions,Psycopg2,Google Cloud Sql,我正在尝试使用云函数Python脚本连接到运行PostgreSQL 11的云SQL。理想情况下,我希望使用一个简单的pandas.DataFrame.to\u sql()连接到数据库,这需要一个sqlalchemy.create\u engine()来连接 这是我当前的尝试(我已经尝试了使用/不使用/.s.PGSQL.5432后缀): engine=sqlalchemy.create_engine('postgresql+psycopg2://USERNAME:PASSWORD@/DB_NAME

我正在尝试使用云函数Python脚本连接到运行PostgreSQL 11的云SQL。理想情况下,我希望使用一个简单的
pandas.DataFrame.to\u sql()
连接到数据库,这需要一个
sqlalchemy.create\u engine()
来连接

这是我当前的尝试(我已经尝试了使用/不使用
/.s.PGSQL.5432
后缀):

engine=sqlalchemy.create_engine('postgresql+psycopg2://USERNAME:PASSWORD@/DB_NAME?host=/cloudsql/INSTANCE_CONNECTION_NAME/.s.PGSQL.5432'))
引擎连接()
我还尝试了提供的直接使用
psycopg2
但也不起作用

Error: function crashed. Details:
could not connect to server: Connection refused
    Is the server running locally and accepting
    connections on Unix domain socket "/cloudsql/vida-production:us-central1:vida-ops/.s.PGSQL.5432"?
编辑: 谢谢你指出这一点。因为云函数正在尝试连接到另一个项目上的云SQL。我必须将云功能的服务帐户添加到云SQL项目的IAM中

设置IAM后,我用于将
sqlalchemy
引擎连接到云SQL的Python代码如下:

#不要添加“/.s.PGSQL.5432后缀”,因为它已经被库自动添加回。。。
engine=sqlalchemy.create_engine('postgresql+psycopg2://USERNAME:PASSWORD@/DB_NAME?host=/cloudsql/INSTANCE_CONNECTION_NAME'))
引擎连接()

确保检查以下事项:

  • 启用云SQL管理API
  • 确保默认服务帐户具有
    云SQL客户端
    IAM角色

如果要在两个项目之间进行连接,请确保启用Admin API并向运行您尝试从中连接的功能的服务帐户授予权限(对于两个项目)

您是否正在使用第二代云sql实例@DougStevenson是的,我已经验证了我使用的是第二代云SQLThank@kurtisvg,云函数和云SQL在不同的项目中。因此,在像您建议的那样将服务帐户添加到云SQL IAM角色之后,它就可以工作了!