1+ import json
12
23import sqlalchemy as db
34from sqlalchemy import text , Column , inspect
@@ -39,10 +40,11 @@ def get_db_url(cls, db_type, user, password, host, port, db_name):
3940 )
4041 logger .info (f"db_url: { db_url } " )
4142 elif db_type == 'bigquery' :
43+ password = json .loads (password )
4244 db_url = db .engine .URL .create (
4345 drivername = cls .db_mapping [db_type ],
4446 host = host , # BigQuery project. Note: without dataset
45- query = {'credentials_path' : password }
47+ query = {'credentials_path' : json . dumps ( password ) }
4648 )
4749 else :
4850 db_url = db .engine .URL .create (
@@ -67,7 +69,11 @@ def test_connection(cls, db_type, user, password, host, port, db_name) -> bool:
6769 connect_args = {'s3_staging_dir' : db_name }
6870 )
6971 else :
70- engine = db .create_engine (cls .get_db_url (db_type , user , password , host , port , db_name ))
72+ if db_type == "bigquery" :
73+ password = json .loads (password )
74+ engine = db .create_engine (url = host , credentials_info = password )
75+ else :
76+ engine = db .create_engine (cls .get_db_url (db_type , user , password , host , port , db_name ))
7177 connection = engine .connect ()
7278 return True
7379 except Exception as e :
@@ -80,7 +86,11 @@ def get_all_schema_names_by_connection(cls, connection: ConnectConfigEntity):
8086 db_type = connection .db_type
8187 db_url = cls .get_db_url (db_type , connection .db_user , connection .db_pwd , connection .db_host , connection .db_port ,
8288 connection .db_name )
83- engine = db .create_engine (db_url )
89+ if db_type == "bigquery" :
90+ password = json .loads (connection .db_pwd )
91+ engine = db .create_engine (url = connection .db_host , credentials_info = password )
92+ else :
93+ engine = db .create_engine (db_url )
8494 inspector = inspect (engine )
8595
8696 if db_type == 'postgresql' :
@@ -104,7 +114,11 @@ def get_all_tables_by_connection(cls, connection: ConnectConfigEntity, schemas=N
104114 def get_metadata_by_connection (cls , connection , schemas ):
105115 db_url = cls .get_db_url (connection .db_type , connection .db_user , connection .db_pwd , connection .db_host ,
106116 connection .db_port , connection .db_name )
107- engine = db .create_engine (db_url )
117+ if connection .db_type == "bigquery" :
118+ password = json .loads (connection .db_pwd )
119+ engine = db .create_engine (url = connection .db_host , credentials_info = password )
120+ else :
121+ engine = db .create_engine (db_url )
108122 # connection = engine.connect()
109123 metadata = db .MetaData ()
110124 if connection .db_type == 'bigquery' :
@@ -179,3 +193,7 @@ def get_db_url_by_connection(cls, connection: ConnectConfigEntity):
179193 db_url = cls .get_db_url (connection .db_type , connection .db_user , connection .db_pwd , connection .db_host ,
180194 connection .db_port , connection .db_name )
181195 return db_url
196+
197+ @classmethod
198+ def get_password_host_by_connection (cls , connection : ConnectConfigEntity ):
199+ return connection .db_pwd , connection .db_host
0 commit comments