@@ -32,6 +32,7 @@ async def create_sqlalchemy_engine(
3232 user : str ,
3333 password : str ,
3434 db : str ,
35+ ip_type : str ,
3536 refresh_strategy : str = "background" ,
3637 resolver : Union [type [DefaultResolver ], type [DnsResolver ]] = DefaultResolver ,
3738) -> tuple [sqlalchemy .ext .asyncio .engine .AsyncEngine , Connector ]:
@@ -63,6 +64,8 @@ async def create_sqlalchemy_engine(
6364 The database user's password, e.g., secret-password
6465 db (str):
6566 The name of the database, e.g., mydb
67+ ip_type (str):
68+ The IP type of the Cloud SQL instance.
6669 refresh_strategy (Optional[str]):
6770 Refresh strategy for the Cloud SQL Connector. Can be one of "lazy"
6871 or "background". For serverless environments use "lazy" to avoid
@@ -87,9 +90,7 @@ async def create_sqlalchemy_engine(
8790 user = user ,
8891 password = password ,
8992 db = db ,
90- ip_type = os .environ .get (
91- "IP_TYPE" , "public"
92- ), # can also be "private" or "psc"
93+ ip_type = ip_type ,
9394 ),
9495 execution_options = {"isolation_level" : "AUTOCOMMIT" },
9596 )
@@ -101,6 +102,7 @@ async def create_asyncpg_pool(
101102 user : str ,
102103 password : str ,
103104 db : str ,
105+ ip_type : str ,
104106 refresh_strategy : str = "background" ,
105107) -> tuple [asyncpg .Pool , Connector ]:
106108 """Creates a native asyncpg connection pool for a Cloud SQL instance and
@@ -130,6 +132,8 @@ async def create_asyncpg_pool(
130132 The database user's password, e.g., secret-password
131133 db (str):
132134 The name of the database, e.g., mydb
135+ ip_type (str):
136+ The IP type of the Cloud SQL instance.
133137 refresh_strategy (Optional[str]):
134138 Refresh strategy for the Cloud SQL Connector. Can be one of "lazy"
135139 or "background". For serverless environments use "lazy" to avoid
@@ -147,9 +151,7 @@ async def getconn(
147151 user = user ,
148152 password = password ,
149153 db = db ,
150- ip_type = os .environ .get (
151- "IP_TYPE" , "public"
152- ), # can also be "private" or "psc",
154+ ip_type = ip_type
153155 ** kwargs ,
154156 )
155157 return conn
@@ -165,8 +167,9 @@ async def test_sqlalchemy_connection_with_asyncpg() -> None:
165167 user = os .environ ["POSTGRES_USER" ]
166168 password = os .environ ["POSTGRES_PASS" ]
167169 db = os .environ ["POSTGRES_DB" ]
170+ ip_type = os .environ .get ("IP_TYPE" , "public" ) # can be "public", "private" or "psc"
168171
169- pool , connector = await create_sqlalchemy_engine (inst_conn_name , user , password , db )
172+ pool , connector = await create_sqlalchemy_engine (inst_conn_name , user , password , db , ip_type )
170173
171174 async with pool .connect () as conn :
172175 res = (await conn .execute (sqlalchemy .text ("SELECT 1" ))).fetchone ()
@@ -181,9 +184,10 @@ async def test_lazy_sqlalchemy_connection_with_asyncpg() -> None:
181184 user = os .environ ["POSTGRES_USER" ]
182185 password = os .environ ["POSTGRES_PASS" ]
183186 db = os .environ ["POSTGRES_DB" ]
187+ ip_type = os .environ .get ("IP_TYPE" , "public" ) # can be "public", "private" or "psc"
184188
185189 pool , connector = await create_sqlalchemy_engine (
186- inst_conn_name , user , password , db , "lazy"
190+ inst_conn_name , user , password , db , ip_type , "lazy"
187191 )
188192
189193 async with pool .connect () as conn :
@@ -199,9 +203,10 @@ async def test_custom_SAN_with_dns_sqlalchemy_connection_with_asyncpg() -> None:
199203 user = os .environ ["POSTGRES_USER" ]
200204 password = os .environ ["POSTGRES_CUSTOMER_CAS_PASS" ]
201205 db = os .environ ["POSTGRES_DB" ]
206+ ip_type = os .environ .get ("IP_TYPE" , "public" ) # can be "public", "private" or "psc"
202207
203208 pool , connector = await create_sqlalchemy_engine (
204- inst_conn_name , user , password , db , resolver = DnsResolver
209+ inst_conn_name , user , password , db , ip_type , resolver = DnsResolver
205210 )
206211
207212 async with pool .connect () as conn :
@@ -217,8 +222,9 @@ async def test_connection_with_asyncpg() -> None:
217222 user = os .environ ["POSTGRES_USER" ]
218223 password = os .environ ["POSTGRES_PASS" ]
219224 db = os .environ ["POSTGRES_DB" ]
225+ ip_type = os .environ .get ("IP_TYPE" , "public" ) # can be "public", "private" or "psc"
220226
221- pool , connector = await create_asyncpg_pool (inst_conn_name , user , password , db )
227+ pool , connector = await create_asyncpg_pool (inst_conn_name , user , password , db , ip_type )
222228
223229 async with pool .acquire () as conn :
224230 res = await conn .fetch ("SELECT 1" )
@@ -233,9 +239,10 @@ async def test_lazy_connection_with_asyncpg() -> None:
233239 user = os .environ ["POSTGRES_USER" ]
234240 password = os .environ ["POSTGRES_PASS" ]
235241 db = os .environ ["POSTGRES_DB" ]
242+ ip_type = os .environ .get ("IP_TYPE" , "public" ) # can be "public", "private" or "psc"
236243
237244 pool , connector = await create_asyncpg_pool (
238- inst_conn_name , user , password , db , "lazy"
245+ inst_conn_name , user , password , db , ip_type , "lazy"
239246 )
240247
241248 async with pool .acquire () as conn :
0 commit comments