@@ -150,35 +150,48 @@ def insert(self, data: Union[pd.DataFrame, Query, dict]):
150150 """
151151 Insert data to knowledge base
152152
153- >>> # insert using query
154- >>> my_kb.insert(server.databases.example_db.tables.houses_sales.filter(type='house'))
155153 >>> # using dataframe
156154 >>> my_kb.insert(pd.read_csv('house_sales.csv'))
157155 >>> # using dict
158156 >>> my_kb.insert({'type': 'house', 'date': '2020-02-02'})
159157
160- Data will be if id (defined by id_column param, see create knowledge base) is already exists in knowledge base
161- it will be replaced
158+ If id is already exists in knowledge base:
159+ - it will be replaced
160+ - `id` column can be defined by id_column param, see create knowledge base
162161
163162 :param data: Dataframe or Query object or dict.
164163 """
165164
165+ if isinstance (data , Query ):
166+ # for back compatibility
167+ return self .insert_query (data )
168+
166169 if isinstance (data , dict ):
167- data = pd .DataFrame ([data ])
170+ data = [data ]
171+ elif isinstance (data , pd .DataFrame ):
172+ data = data .to_dict ('records' )
173+ else :
174+ raise ValueError ("Unknown data type, accepted types: DataFrame, Query, dict" )
175+
176+ return self .api .insert_into_knowledge_base (
177+ self .project .name ,
178+ self .name ,
179+ data = {'rows' : data }
180+ )
168181
169- if isinstance ( data , pd . DataFrame ):
170- # insert data
171- data_split = data . to_dict ( 'split' )
182+ def insert_query ( self , data : Query ):
183+ """
184+ Insert data to knowledge base using query
172185
173- ast_query = Insert (
174- table = self .table_name ,
175- columns = data_split ['columns' ],
176- values = data_split ['data' ]
177- )
178- sql = ast_query .to_string ()
186+ >>> my_kb.insert(server.databases.example_db.tables.houses_sales.filter(type='house'))
179187
180- else :
181- # insert from select
188+ Data will be if id (defined by id_column param, see create knowledge base) is already exists in knowledge base
189+ it will be replaced
190+
191+ :param data: Dataframe or Query object or dict.
192+ """
193+ if is_saving ():
194+ # generate insert from select query
182195 if data .database is not None :
183196 ast_query = Insert (
184197 table = self .table_name ,
@@ -188,11 +201,15 @@ def insert(self, data: Union[pd.DataFrame, Query, dict]):
188201 else :
189202 sql = f'INSERT INTO { self .table_name .to_string ()} ({ data .sql } )'
190203
191- if is_saving ():
192204 # don't execute it right now, return query object
193205 return Query (self , sql , self .database )
194206
195- self .api .sql_query (sql , self .database )
207+ # query have to be in context of mindsdb project
208+ self .api .insert_into_knowledge_base (
209+ self .project .name ,
210+ self .name ,
211+ data = {'query' : data .sql }
212+ )
196213
197214
198215class KnowledgeBases (CollectionBase ):
0 commit comments