feat: 添加数据库配置模块,支持动态获取数据库连接信息
This commit is contained in:
63
database_test_python/db_config.py
Normal file
63
database_test_python/db_config.py
Normal file
@@ -0,0 +1,63 @@
|
||||
import os
|
||||
from getpass import getpass
|
||||
|
||||
# Global cache for database passwords to avoid asking multiple times for the same database
|
||||
_password_cache = {}
|
||||
|
||||
def get_db_password(server_name: str, db_name: str) -> str:
|
||||
conn_name = f"{server_name}.{db_name}"
|
||||
|
||||
# Only ask once per target database per script run
|
||||
if conn_name in _password_cache:
|
||||
return _password_cache[conn_name]
|
||||
|
||||
# Hardcoded fallback per user request
|
||||
if server_name == "109portal":
|
||||
password = "YourActualStrongPasswordForPostgres!"
|
||||
elif server_name == "80portal":
|
||||
password = "H3IkLUt8K!x"
|
||||
else:
|
||||
env_var_name = f"{server_name.upper()}_PG_PASSWORD"
|
||||
password = os.getenv(env_var_name)
|
||||
|
||||
if not password:
|
||||
# Prompt specific to 'name'.'database'
|
||||
password = getpass(f"{conn_name} password: ")
|
||||
|
||||
_password_cache[conn_name] = password
|
||||
return password
|
||||
|
||||
def get_pg_conn_kwargs(prefix: str) -> dict:
|
||||
if prefix == "PORTAL":
|
||||
server_name = "80portal"
|
||||
default_port = 15434
|
||||
default_db = "log_platform"
|
||||
elif prefix == "TEST" or prefix == "TARGET":
|
||||
server_name = "109portal"
|
||||
default_port = 15433
|
||||
default_db = "test"
|
||||
else: # SOURCE
|
||||
server_name = "80portal"
|
||||
default_port = 15434
|
||||
default_db = "log_platform"
|
||||
|
||||
dbname = os.getenv(f"{prefix}_PG_DB", default_db)
|
||||
|
||||
return {
|
||||
"host": os.getenv(f"{prefix}_PG_HOST", "blv-rd.tech"),
|
||||
"port": int(os.getenv(f"{prefix}_PG_PORT", default_port)),
|
||||
"dbname": dbname,
|
||||
"user": os.getenv(f"{prefix}_PG_USER", "log_admin"),
|
||||
"password": get_db_password(server_name, dbname)
|
||||
}
|
||||
|
||||
def get_db_url(prefix: str) -> str:
|
||||
kwargs = get_pg_conn_kwargs(prefix)
|
||||
return f"postgresql+psycopg2://{kwargs['user']}:{kwargs['password']}@{kwargs['host']}:{kwargs['port']}/{kwargs['dbname']}"
|
||||
|
||||
DB_CONFIG = {
|
||||
"SOURCE": lambda: get_pg_conn_kwargs("SOURCE"),
|
||||
"TARGET": lambda: get_pg_conn_kwargs("TARGET"),
|
||||
"PORTAL": lambda: get_pg_conn_kwargs("PORTAL"),
|
||||
"TEST": lambda: get_pg_conn_kwargs("TEST"),
|
||||
}
|
||||
Reference in New Issue
Block a user