Menghubungkan ke Cloud SQL untuk PostgreSQL dengan Python melalui Soket Unix

Membuat koneksi database ke instance Cloud SQL untuk PostgreSQL menggunakan soket Unix. Aplikasi ini menggunakan library SQLAlchemy untuk membuat mesin koneksi, yang dikonfigurasi secara khusus untuk driver pg8000. Skrip mengambil parameter koneksi yang diperlukan seperti pengguna database, sandi, nama database, dan jalur soket Unix dari variabel lingkungan. Pendekatan ini sangat berguna untuk aplikasi yang berjalan di region Google Cloud yang sama dengan instance Cloud SQL, yang menawarkan cara yang aman dan efisien untuk berkomunikasi dengan database tanpa perlu mengonfigurasi daftar yang diizinkan IP untuk koneksi TCP.

Mempelajari lebih lanjut

Untuk dokumentasi mendetail yang menyertakan contoh kode ini, lihat referensi berikut:

Contoh kode

Python

Untuk melakukan autentikasi ke Cloud SQL untuk PostgreSQL, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

import os

import sqlalchemy


def connect_unix_socket() -> sqlalchemy.engine.base.Engine:
    """Initializes a Unix socket connection pool for a Cloud SQL instance of Postgres."""
    # Note: Saving credentials in environment variables is convenient, but not
    # secure - consider a more secure solution such as
    # Cloud Secret Manager (https://cloud.google.com/secret-manager) to help
    # keep secrets safe.
    db_user = os.environ["DB_USER"]  # e.g. 'my-database-user'
    db_pass = os.environ["DB_PASS"]  # e.g. 'my-database-password'
    db_name = os.environ["DB_NAME"]  # e.g. 'my-database'
    unix_socket_path = os.environ[
        "INSTANCE_UNIX_SOCKET"
    ]  # e.g. '/cloudsql/project:region:instance'

    pool = sqlalchemy.create_engine(
        # Equivalent URL:
        # postgresql+pg8000://<db_user>:<db_pass>@/<db_name>
        #                         ?unix_sock=<INSTANCE_UNIX_SOCKET>/.s.PGSQL.5432
        # Note: Some drivers require the `unix_sock` query parameter to use a different key.
        # For example, 'psycopg2' uses the path set to `host` in order to connect successfully.
        sqlalchemy.engine.url.URL.create(
            drivername="postgresql+pg8000",
            username=db_user,
            password=db_pass,
            database=db_name,
            query={"unix_sock": f"{unix_socket_path}/.s.PGSQL.5432"},
        ),
        # ...
    )
    return pool

Langkah berikutnya

Untuk menelusuri dan memfilter contoh kode untuk produk Google Cloud lainnya, lihat Google Cloud browser contoh.