You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Django框架连接Google Cloud PostgreSQL及配置修改方法

如何用Django框架连接Google Cloud PostgreSQL?

没问题,我来一步步告诉你怎么把Django本地PostgreSQL的配置改成适配Google Cloud托管数据库的版本。

首先先回顾下你提到的本地默认配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'LOCAL_DB_NAME',
        'USER': 'LOCAL_DB_USER',
        'PASSWORD': 'LOCAL_DB_PASS',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

接下来是具体的修改步骤和配置说明:

1. 确认依赖(可选但建议)

确保你的项目已经安装了psycopg2或者psycopg2-binary——这是Django连接PostgreSQL的标准驱动。如果还没装,可以用pip安装:

pip install psycopg2-binary  # 二进制版本更容易安装,适合开发环境
# 或者生产环境可以用编译版:pip install psycopg2

2. 修改settings.py中的数据库配置

大部分字段逻辑和本地一致,但有几个关键项需要替换成Google Cloud PostgreSQL的信息:

  • ENGINE:可以保留原来的django.db.backends.postgresql_psycopg2,或者用Django 1.8+支持的更简洁的django.db.backends.postgresql,两者功能一致
  • NAME:填写你在Google Cloud控制台创建的数据库名称(比如你创建实例时设置的默认库名,或者自己新建的)
  • USER:填写GCP PostgreSQL实例的用户名,默认是postgres,如果你改了就填自定义的用户名
  • PASSWORD:填写你创建实例时设置的数据库密码,或者后续在控制台修改后的密码
  • HOST:这是最关键的,要填Google Cloud PostgreSQL实例的公共IP地址(在GCP控制台的实例详情页面可以找到);如果你的Django应用部署在GCP同网络的服务(比如App Engine、Cloud Run),还可以用私有IP或者Unix套接字(后面会讲)
  • PORT:保持默认的5432即可

修改后的示例配置如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'my_gcp_database',
        'USER': 'postgres',
        'PASSWORD': 'my_secure_db_password',
        'HOST': '34.123.45.67',  # 替换成你的GCP实例公共IP
        'PORT': '5432',
    }
}

3. 关键的前置配置(必须做!)

在你尝试连接之前,一定要在Google Cloud控制台的PostgreSQL实例页面,找到连接选项卡,把你的Django应用所在的IP地址添加到授权网络列表里——如果是本地测试,可以临时添加0.0.0.0/0(但生产环境绝对不要这么做,要限制到具体的IP),否则GCP会拒绝你的连接请求。

4. 更优的部署方式(针对GCP内部服务)

如果你的Django应用部署在Google Cloud的App Engine、Cloud Run或者Compute Engine上,推荐用Unix套接字连接,这样更安全(不需要暴露公共IP)且性能更好。此时配置需要调整:

import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'my_gcp_database',
        'USER': 'postgres',
        'PASSWORD': 'my_secure_db_password',
        'HOST': f'/cloudsql/{os.environ.get("CLOUD_SQL_CONNECTION_NAME")}',
        # CLOUD_SQL_CONNECTION_NAME格式是:项目ID:区域:实例名称,比如my-project:us-central1:my-db-instance
        'PORT': '',
    }
}

这种方式不需要配置授权网络,但要确保你的服务账号有Cloud SQL Client的权限。

生产环境安全建议

绝对不要把数据库密码硬编码在settings.py里!建议用环境变量读取,比如:

PASSWORD = os.getenv('DB_PASSWORD')

或者用Google Cloud Secret Manager来管理敏感信息,避免泄露风险。

内容的提问来源于stack exchange,提问作者George Pligoropoulos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:21:54