Skip to content

Commit e5aa603

Browse files
author
Saketram Durbha
committed
refactor Cloud SQL PostgreSQL & MySQL samples
* Rename environment variable DB_SOCKET_PATH to DB_SOCKET_DIR for better description of its contents * Move region tags and refactor code so as to give users a better sample experience
1 parent 15fede4 commit e5aa603

File tree

4 files changed

+66
-51
lines changed

4 files changed

+66
-51
lines changed

cloud-sql/mysql/sqlalchemy/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ sudo chown -R $USER /cloudsql
8787

8888
You'll also need to initialize an environment variable containing the directory you just created:
8989
```bash
90-
export DB_SOCKET_PATH=/path/to/the/new/directory
90+
export DB_SOCKET_DIR=/path/to/the/new/directory
9191
```
9292

9393
Use these terminal commands to initialize other environment variables as well:
@@ -101,7 +101,7 @@ export DB_NAME='<DB_NAME>'
101101

102102
Then use this command to launch the proxy in the background:
103103
```bash
104-
./cloud_sql_proxy -dir=$DB_SOCKET_PATH --instances=$INSTANCE_CONNECTION_NAME --credential_file=$GOOGLE_APPLICATION_CREDENTIALS &
104+
./cloud_sql_proxy -dir=$DB_SOCKET_DIR --instances=$INSTANCE_CONNECTION_NAME --credential_file=$GOOGLE_APPLICATION_CREDENTIALS &
105105
```
106106

107107
### Testing the application

cloud-sql/mysql/sqlalchemy/main.py

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,6 @@
2020
import sqlalchemy
2121

2222

23-
# Remember - storing secrets in plaintext is potentially unsafe. Consider using
24-
# something like https://cloud.google.com/kms/ to help keep secrets secret.
25-
db_user = os.environ.get("DB_USER")
26-
db_pass = os.environ.get("DB_PASS")
27-
db_name = os.environ.get("DB_NAME")
28-
cloud_sql_connection_name = os.environ.get("CLOUD_SQL_CONNECTION_NAME")
29-
3023
app = Flask(__name__)
3124

3225
logger = logging.getLogger()
@@ -68,39 +61,51 @@ def init_connection_engine():
6861

6962
def init_tcp_connection_engine(db_config):
7063
# [START cloud_sql_mysql_sqlalchemy_create_tcp]
71-
db_socket_addr = os.environ.get("DB_HOST").split(":")
64+
# Remember - storing secrets in plaintext is potentially unsafe. Consider using
65+
# something like https://cloud.google.com/kms/ to help keep secrets secret.
66+
db_user = os.environ.get("DB_USER")
67+
db_pass = os.environ.get("DB_PASS")
68+
db_name = os.environ.get("DB_NAME")
69+
db_host = os.environ.get("DB_HOST")
70+
71+
db_host_parts = db_host.split(":")
7272

73-
# Extract host and port from socket address
74-
db_host = db_socket_addr[0]
75-
db_port = int(db_socket_addr[1])
73+
# Extract host and port from db_host socket address
74+
db_hostname = db_host_parts[0]
75+
db_port = int(db_host_parts[1])
7676

77-
return sqlalchemy.create_engine(
77+
pool = sqlalchemy.create_engine(
7878
# Equivalent URL:
7979
# mysql+pymysql://<db_user>:<db_pass>@<db_host>:<db_port>/<db_name>
8080
sqlalchemy.engine.url.URL(
8181
drivername="mysql+pymysql",
8282
username=db_user,
8383
password=db_pass,
84-
host=db_host,
84+
host=db_hostname,
8585
port=db_port,
8686
database=db_name,
8787
),
8888
# ... Specify additional properties here.
89-
# [START_EXCLUDE]
89+
# [END cloud_sql_mysql_sqlalchemy_create_tcp]
9090
**db_config
91-
# [END_EXCLUDE]
91+
# [START cloud_sql_mysql_sqlalchemy_create_tcp]
9292
)
9393
# [END cloud_sql_mysql_sqlalchemy_create_tcp]
9494

95+
return pool
96+
9597

9698
def init_unix_connection_engine(db_config):
9799
# [START cloud_sql_mysql_sqlalchemy_create_socket]
98-
if os.environ.get("DB_SOCKET_PATH"):
99-
socket_path = os.environ.get("DB_SOCKET_PATH")
100-
else:
101-
socket_path = "/cloudsql"
102-
103-
return sqlalchemy.create_engine(
100+
# Remember - storing secrets in plaintext is potentially unsafe. Consider using
101+
# something like https://cloud.google.com/kms/ to help keep secrets secret.
102+
db_user = os.environ.get("DB_USER")
103+
db_pass = os.environ.get("DB_PASS")
104+
db_name = os.environ.get("DB_NAME")
105+
db_socket_dir = os.environ.get("DB_SOCKET_DIR", "/cloudsql")
106+
cloud_sql_connection_name = os.environ.get("CLOUD_SQL_CONNECTION_NAME")
107+
108+
pool = sqlalchemy.create_engine(
104109
# Equivalent URL:
105110
# mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=<socket_path>/<cloud_sql_instance_name>
106111
sqlalchemy.engine.url.URL(
@@ -110,17 +115,20 @@ def init_unix_connection_engine(db_config):
110115
database=db_name,
111116
query={
112117
"unix_socket": "{}/{}".format(
113-
socket_path,
118+
db_socket_dir,
114119
cloud_sql_connection_name)
115120
}
116121
),
117122
# ... Specify additional properties here.
118-
# [START_EXCLUDE]
123+
124+
# [END cloud_sql_mysql_sqlalchemy_create_socket]
119125
**db_config
120-
# [END_EXCLUDE]
126+
# [START cloud_sql_mysql_sqlalchemy_create_socket]
121127
)
122128
# [END cloud_sql_mysql_sqlalchemy_create_socket]
123129

130+
return pool
131+
124132

125133
# The SQLAlchemy engine will help manage interactions, including automatically
126134
# managing a pool of connections to your database

cloud-sql/postgres/sqlalchemy/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ sudo chown -R $USER /path/to/the/new/directory
8585

8686
You'll also need to initialize an environment variable containing the directory you just created:
8787
```bash
88-
export DB_SOCKET_PATH=/path/to/the/new/directory
88+
export DB_SOCKET_DIR=/path/to/the/new/directory
8989
```
9090
9191
Use these terminal commands to initialize other environment variables as well:
@@ -99,7 +99,7 @@ export DB_NAME='<DB_NAME>'
9999
100100
Then use this command to launch the proxy in the background:
101101
```bash
102-
./cloud_sql_proxy -dir=$DB_SOCKET_PATH --instances=$INSTANCE_CONNECTION_NAME --credential_file=$GOOGLE_APPLICATION_CREDENTIALS &
102+
./cloud_sql_proxy -dir=$DB_SOCKET_DIR --instances=$INSTANCE_CONNECTION_NAME --credential_file=$GOOGLE_APPLICATION_CREDENTIALS &
103103
```
104104
105105
### Testing the application

cloud-sql/postgres/sqlalchemy/main.py

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,6 @@
2020
import sqlalchemy
2121

2222

23-
# Remember - storing secrets in plaintext is potentially unsafe. Consider using
24-
# something like https://cloud.google.com/kms/ to help keep secrets secret.
25-
db_user = os.environ.get("DB_USER")
26-
db_pass = os.environ.get("DB_PASS")
27-
db_name = os.environ.get("DB_NAME")
28-
cloud_sql_connection_name = os.environ.get("CLOUD_SQL_CONNECTION_NAME")
29-
3023
app = Flask(__name__)
3124

3225
logger = logging.getLogger()
@@ -71,13 +64,20 @@ def init_connection_engine():
7164

7265
def init_tcp_connection_engine(db_config):
7366
# [START cloud_sql_postgres_sqlalchemy_create_tcp]
74-
db_socket_addr = os.environ.get("DB_HOST").split(":")
67+
# Remember - storing secrets in plaintext is potentially unsafe. Consider using
68+
# something like https://cloud.google.com/kms/ to help keep secrets secret.
69+
db_user = os.environ.get("DB_USER")
70+
db_pass = os.environ.get("DB_PASS")
71+
db_name = os.environ.get("DB_NAME")
72+
db_host = os.environ.get("DB_HOST")
73+
74+
db_host_parts = db_host.split(":")
7575

76-
# Extract host and port from socket address
77-
db_host = db_socket_addr[0]
78-
db_port = int(db_socket_addr[1])
76+
# Extract host and port from db_host socket address
77+
db_host = db_host_parts[0]
78+
db_port = int(db_host_parts[1])
7979

80-
return sqlalchemy.create_engine(
80+
pool = sqlalchemy.create_engine(
8181
# Equivalent URL:
8282
# postgres+pg8000://<db_user>:<db_pass>@<db_host>:<db_port>/<db_name>
8383
sqlalchemy.engine.url.URL(
@@ -89,21 +89,26 @@ def init_tcp_connection_engine(db_config):
8989
database=db_name
9090
),
9191
# ... Specify additional properties here.
92-
# [START_EXCLUDE]
92+
# [END cloud_sql_postgres_sqlalchemy_create_tcp]
9393
**db_config
94-
# [END_EXCLUDE]
94+
# [START cloud_sql_postgres_sqlalchemy_create_tcp]
9595
)
9696
# [END cloud_sql_postgres_sqlalchemy_create_tcp]
9797

98+
return pool
99+
98100

99101
def init_unix_connection_engine(db_config):
100102
# [START cloud_sql_postgres_sqlalchemy_create_socket]
101-
if os.environ.get("DB_SOCKET_PATH"):
102-
socket_path = os.environ.get("DB_SOCKET_PATH")
103-
else:
104-
socket_path = "/cloudsql"
105-
106-
return sqlalchemy.create_engine(
103+
# Remember - storing secrets in plaintext is potentially unsafe. Consider using
104+
# something like https://cloud.google.com/kms/ to help keep secrets secret.
105+
db_user = os.environ.get("DB_USER")
106+
db_pass = os.environ.get("DB_PASS")
107+
db_name = os.environ.get("DB_NAME")
108+
db_socket_dir = os.environ.get("DB_SOCKET_DIR", "/cloudsql")
109+
cloud_sql_connection_name = os.environ.get("CLOUD_SQL_CONNECTION_NAME")
110+
111+
pool = sqlalchemy.create_engine(
107112
# Equivalent URL:
108113
# postgres+pg8000://<db_user>:<db_pass>@/<db_name>
109114
# ?unix_sock=<socket_path>/<cloud_sql_instance_name>/.s.PGSQL.5432
@@ -114,17 +119,19 @@ def init_unix_connection_engine(db_config):
114119
database=db_name,
115120
query={
116121
"unix_sock": "{}/{}/.s.PGSQL.5432".format(
117-
socket_path,
122+
db_socket_dir,
118123
cloud_sql_connection_name)
119124
}
120125
),
121126
# ... Specify additional properties here.
122-
# [START_EXCLUDE]
127+
# [END cloud_sql_postgres_sqlalchemy_create_socket]
123128
**db_config
124-
# [END_EXCLUDE]
129+
# [START cloud_sql_postgres_sqlalchemy_create_socket]
125130
)
126131
# [END cloud_sql_postgres_sqlalchemy_create_socket]
127132

133+
return pool
134+
128135

129136
# The SQLAlchemy engine will help manage interactions, including automatically
130137
# managing a pool of connections to your database

0 commit comments

Comments
 (0)