2222import sqlalchemy
2323
2424from google .cloud .sql .connector import Connector
25+ from google .cloud .sql .connector import DefaultResolver
26+ from google .cloud .sql .connector import DnsResolver
2527
2628
2729def create_sqlalchemy_engine (
@@ -30,6 +32,7 @@ def create_sqlalchemy_engine(
3032 password : str ,
3133 db : str ,
3234 refresh_strategy : str = "background" ,
35+ resolver : DefaultResolver | DnsResolver = DefaultResolver ,
3336) -> tuple [sqlalchemy .engine .Engine , Connector ]:
3437 """Creates a connection pool for a Cloud SQL instance and returns the pool
3538 and the connector. Callers are responsible for closing the pool and the
@@ -64,8 +67,13 @@ def create_sqlalchemy_engine(
6467 Refresh strategy for the Cloud SQL Connector. Can be one of "lazy"
6568 or "background". For serverless environments use "lazy" to avoid
6669 errors resulting from CPU being throttled.
70+ resolver (Optional[google.cloud.sql.connector.DefaultResolver | google.cloud.sql.connector.DnsResolver])
71+ Resolver class for the Cloud SQL Connector. Can be one of
72+ DefaultResolver (default) or DnsResolver. The resolver tells the
73+ connector whether to resolve the 'instance_connection_name' as a
74+ Cloud SQL instance connection name or as a domain name.
6775 """
68- connector = Connector (refresh_strategy = refresh_strategy )
76+ connector = Connector (refresh_strategy = refresh_strategy , resolver = resolver )
6977
7078 def getconn () -> pg8000 .dbapi .Connection :
7179 conn : pg8000 .dbapi .Connection = connector .connect (
@@ -153,3 +161,21 @@ def test_customer_managed_CAS_pg8000_connection() -> None:
153161 curr_time = time [0 ]
154162 assert type (curr_time ) is datetime
155163 connector .close ()
164+
165+
166+ def test_domain_name_pg8000_connection () -> None :
167+ """Basic test to get time from database using domain name to connect."""
168+ domain_name = os .environ ["POSTGRES_CUSTOMER_CAS_DOMAIN_NAME" ]
169+ user = os .environ ["POSTGRES_USER" ]
170+ password = os .environ ["POSTGRES_CUSTOMER_CAS_PASS" ]
171+ db = os .environ ["POSTGRES_DB" ]
172+
173+ engine , connector = create_sqlalchemy_engine (
174+ domain_name , user , password , db , "lazy" , DnsResolver
175+ )
176+ with engine .connect () as conn :
177+ time = conn .execute (sqlalchemy .text ("SELECT NOW()" )).fetchone ()
178+ conn .commit ()
179+ curr_time = time [0 ]
180+ assert type (curr_time ) is datetime
181+ connector .close ()
0 commit comments