# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # [START cloud_sql_mysql_sqlalchemy_connect_unix] import os import sqlalchemy def connect_unix_socket() -> sqlalchemy.engine.base.Engine: """Initializes a Unix socket connection pool for a Cloud SQL instance of MySQL.""" # 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: # mysql+pymysql://:@/?unix_socket=/ sqlalchemy.engine.url.URL.create( drivername="mysql+pymysql", username=db_user, password=db_pass, database=db_name, query={"unix_socket": unix_socket_path}, ), # [START_EXCLUDE] # Pool size is the maximum number of permanent connections to keep. pool_size=5, # Temporarily exceeds the set pool_size if no connections are available. max_overflow=2, # The total number of concurrent connections for your application will be # a total of pool_size and max_overflow. # 'pool_timeout' is the maximum number of seconds to wait when retrieving a # new connection from the pool. After the specified amount of time, an # exception will be thrown. pool_timeout=30, # 30 seconds # 'pool_recycle' is the maximum number of seconds a connection can persist. # Connections that live longer than the specified amount of time will be # re-established pool_recycle=1800, # 30 minutes # [END_EXCLUDE] ) return pool # [END cloud_sql_mysql_sqlalchemy_connect_unix]