Spaces:
Sleeping
Sleeping
ktsn-ud commited on
Commit ·
067af89
1
Parent(s): 5c214c7
DB接続を環境変数からでも行えるように変更
Browse files- app/db/session.py +37 -3
app/db/session.py
CHANGED
|
@@ -77,6 +77,35 @@ def _parse_database_url(database_url: str) -> dict:
|
|
| 77 |
return {key: val for key, val in connect_kwargs.items() if val not in {None, ""}}
|
| 78 |
|
| 79 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
class MySQLConnectionPool:
|
| 81 |
"""Simple thread-safe connection pool for PyMySQL."""
|
| 82 |
|
|
@@ -183,10 +212,15 @@ def _ensure_pool() -> MySQLConnectionPool:
|
|
| 183 |
return _pool
|
| 184 |
|
| 185 |
database_url = _get_env("DATABASE_URL")
|
| 186 |
-
if
|
| 187 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
|
| 189 |
-
connect_kwargs = _parse_database_url(database_url)
|
| 190 |
min_size = int(_get_env("DB_POOL_MIN_SIZE", "1"))
|
| 191 |
max_size = int(_get_env("DB_POOL_MAX_SIZE", "5"))
|
| 192 |
|
|
|
|
| 77 |
return {key: val for key, val in connect_kwargs.items() if val not in {None, ""}}
|
| 78 |
|
| 79 |
|
| 80 |
+
def _build_connect_kwargs_from_env() -> Optional[dict]:
|
| 81 |
+
host = _get_env("DB_HOST")
|
| 82 |
+
database = _get_env("DB_NAME") or _get_env("DB_DATABASE")
|
| 83 |
+
if not host or not database:
|
| 84 |
+
return None
|
| 85 |
+
|
| 86 |
+
connect_kwargs = {
|
| 87 |
+
"host": host,
|
| 88 |
+
"port": int(_get_env("DB_PORT", "3306")), # TODO: DB_PORTのenv追加
|
| 89 |
+
"user": _get_env("DB_USER", ""), # TODO: DB_USERのenv追加
|
| 90 |
+
"password": _get_env("DB_PASSWORD", ""), # TODO: DB_PASSWORDのenv追加
|
| 91 |
+
"database": database,
|
| 92 |
+
"charset": _get_env("DB_CHARSET", "utf8mb4"), # TODO: DB_CHARSETのenv追加
|
| 93 |
+
"autocommit": _str_to_bool(
|
| 94 |
+
_get_env("DB_AUTOCOMMIT", "true")
|
| 95 |
+
), # TODO: DB_AUTOCOMMITのenv追加
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
connect_timeout = _get_env("DB_CONNECT_TIMEOUT")
|
| 99 |
+
if connect_timeout:
|
| 100 |
+
connect_kwargs["connect_timeout"] = float(connect_timeout)
|
| 101 |
+
|
| 102 |
+
ssl_root_cert = _get_env("SSL_ROOT_CERT")
|
| 103 |
+
if ssl_root_cert:
|
| 104 |
+
connect_kwargs["ssl"] = {"ca": ssl_root_cert}
|
| 105 |
+
|
| 106 |
+
return {key: val for key, val in connect_kwargs.items() if val not in {None, ""}}
|
| 107 |
+
|
| 108 |
+
|
| 109 |
class MySQLConnectionPool:
|
| 110 |
"""Simple thread-safe connection pool for PyMySQL."""
|
| 111 |
|
|
|
|
| 212 |
return _pool
|
| 213 |
|
| 214 |
database_url = _get_env("DATABASE_URL")
|
| 215 |
+
if database_url:
|
| 216 |
+
connect_kwargs = _parse_database_url(database_url)
|
| 217 |
+
else:
|
| 218 |
+
connect_kwargs = _build_connect_kwargs_from_env()
|
| 219 |
+
if connect_kwargs is None:
|
| 220 |
+
raise RuntimeError(
|
| 221 |
+
"DATABASE_URL or DB_HOST and DB_NAME must be set in the environment"
|
| 222 |
+
)
|
| 223 |
|
|
|
|
| 224 |
min_size = int(_get_env("DB_POOL_MIN_SIZE", "1"))
|
| 225 |
max_size = int(_get_env("DB_POOL_MAX_SIZE", "5"))
|
| 226 |
|