如何使用Python连接到Cloud SQL?

问题描述 投票:0回答:1

使用 Python 连接到 Cloud SQL 并不总是那么简单。

根据具体情况,有时您必须连接到 Unix 域套接字、将 TCP 连接的 IP 地址列入允许列表、在本地运行 Cloud SQL Auth 代理。确保这些连接安全是另一个挑战:您可能必须管理 SSL 证书、防火墙规则、IP 地址等。

是否有推荐的方法使用 Python 以安全简单的方式连接到 Cloud SQL?

google-cloud-platform google-cloud-sql cloud-sql-proxy
1个回答
8
投票

是的,确实有 Cloud SQL Python Connector,这是一个 Python 包,可以让所有三个受支持的数据库引擎(Postgres、MySQL 和 SQL Server)从任何地方(本地计算机、Cloud Run、App Engine、Cloud Functions 等)都轻松安全连接到 Cloud SQL

Python 连接器是 Cloud SQL 连接器库之一(也可在 JavaGoNode 中使用)。

连接器与其他方法有何不同?

Cloud SQL 连接器库提供 以下优势

  • IAM 授权:连接器使用 IAM 权限来控制谁以及什么可以连接到您的 Cloud SQL 实例。
  • 提高安全性:连接器在客户端连接器和服务器端代理之间使用强大的、更新的 TLS 1.3 加密和身份验证,独立于数据库协议。
  • 方便:连接器消除了使用和分发 SSL 证书、管理防火墙或源/目标 IP 地址的要求。
  • IAM 数据库身份验证(可选):连接器为 Cloud SQL 的自动 IAM 数据库身份验证功能提供支持。

如何使用 Python 连接器...代码是什么样的?

基本用法(使用SQLAlchemy)

from google.cloud.sql.connector import Connector, IPTypes
import sqlalchemy

# initialize Cloud SQL Connector
connector = Connector()

# SQLAlchemy database connection creator function
def getconn():
    conn = connector.connect(
        "project:region:instance-name", # Cloud SQL Instance Connection Name
        "pg8000",
        user="my-user",
        password="my-password",
        db="my-db-name",
        ip_type=IPTypes.PUBLIC # IPTypes.PRIVATE for private IP
    )
    return conn

# create SQLAlchemy connection pool
pool = sqlalchemy.create_engine(
    "postgresql+pg8000://",
    creator=getconn,
)

# interact with Cloud SQL database using connection pool
with pool.connect() as db_conn:
    # query database
    result = db_conn.execute("SELECT * from my_table").fetchall()

    # Do something with the results
    for row in result:
        print(row)

# close Cloud SQL Connector
connector.close()

有交互式“入门”Colab 笔记本,向您展示如何使用 Cloud SQL Python 连接器 - 所有这些都无需您自己编写一行代码!笔记本将根据您与 Cloud SQL 一起使用的数据库引擎自动使用受支持的数据库驱动程序。

它可以与流行的 Web 框架一起使用吗?

是的,Python Connector 可以轻松地在 Web 框架中使用,例如 Flask-SQLAlchemy(和 Flask)、FastAPI 等。

© www.soinside.com 2019 - 2024. All rights reserved.