1- from typing import List , Union
1+ from typing import Dict , List , Union
22
33from mindsdb_sql_parser .ast .mindsdb import CreateDatabase
44from mindsdb_sql_parser .ast import DropDatabase , Identifier
@@ -15,7 +15,7 @@ class Database:
1515 Allows to work with database (datasource): to use tables and make raw queries
1616
1717 To run native query
18- At this moment query is just saved in Qeury object and not executed
18+ At this moment query is just saved in Query object and not executed
1919
2020 >>> query = database.query('select * from table1') # returns Query
2121
@@ -27,11 +27,12 @@ class Database:
2727
2828 """
2929
30- def __init__ (self , server , name , engine = None ):
30+ def __init__ (self , server , name : str , engine : str = None , params : Dict = None ):
3131 self .server = server
3232 self .name = name
3333 self .engine = engine
3434 self .api = server .api
35+ self .params = params
3536
3637 self .tables = Tables (self , self .api )
3738
@@ -49,6 +50,7 @@ def query(self, sql: str) -> Query:
4950 Make raw query to integration
5051
5152 :param sql: sql of the query
53+ :param database: name of database to query (uses current database by default)
5254 :return: Query object
5355 """
5456 return Query (self .api , sql , database = self .name )
@@ -65,7 +67,7 @@ class Databases(CollectionBase):
6567 # create
6668
6769 >>> db = databases.create('example_db',
68- ... type ='postgres',
70+ ... engine ='postgres',
6971 ... connection_args={'host': ''})
7072
7173 # drop database
@@ -81,11 +83,16 @@ class Databases(CollectionBase):
8183 def __init__ (self , api ):
8284 self .api = api
8385
84- def _list_databases (self ):
86+ def _list_databases (self ) -> Dict [ str , Database ] :
8587 data = self .api .sql_query (
86- "select NAME, ENGINE from information_schema.databases where TYPE='data'"
88+ "select NAME, ENGINE, CONNECTION_DATA from information_schema.databases where TYPE='data'"
8789 )
88- return dict (zip (data .NAME , data .ENGINE ))
90+ name_to_db = {}
91+ for _ , row in data .iterrows ():
92+ name_to_db [row ["NAME" ]] = Database (
93+ self , row ["NAME" ], engine = row ["ENGINE" ], params = row ["CONNECTION_DATA" ]
94+ )
95+ return name_to_db
8996
9097 def list (self ) -> List [Database ]:
9198 """
@@ -94,9 +101,11 @@ def list(self) -> List[Database]:
94101 :return: list of Database objects
95102 """
96103 databases = self ._list_databases ()
97- return [ Database ( self , name , engine = engine ) for name , engine in databases .items ()]
104+ return list ( databases .values ())
98105
99- def create (self , name : str , engine : Union [str , Handler ], connection_args : dict ) -> Database :
106+ def create (
107+ self , name : str , engine : Union [str , Handler ], connection_args : Dict
108+ ) -> Database :
100109 """
101110 Create new integration and return it
102111
@@ -114,7 +123,7 @@ def create(self, name: str, engine: Union[str, Handler], connection_args: dict)
114123 parameters = connection_args ,
115124 )
116125 self .api .sql_query (ast_query .to_string ())
117- return Database (self , name , engine = engine )
126+ return Database (self , name , engine = engine , params = connection_args )
118127
119128 def drop (self , name : str ):
120129 """
@@ -135,4 +144,4 @@ def get(self, name: str) -> Database:
135144 databases = self ._list_databases ()
136145 if name not in databases :
137146 raise AttributeError ("Database doesn't exist" )
138- return Database ( self , name , engine = databases [name ])
147+ return databases [name ]
0 commit comments