@@ -522,8 +522,28 @@ async def run(self, key, params, url=None):
522522 return await resp .json ()
523523
524524 async def upsert (self , model , data , let_null = False ):
525- query = self .query_builder_to_insert (data , let_null ).set_model (model ).compile ()
526- return await self .__then (query , self .is_update (data ))
525+ update_list = [item for item in data if "_KEY" in item ]
526+ insert_list = [item for item in data if "_KEY" not in item ]
527+ merged_results = {"success" : True }
528+ if update_list :
529+ query_update = self .query_builder_to_insert (update_list , let_null ).set_model (model ).compile ()
530+ result_update = await self .__then (query_update , self .is_update (update_list ))
531+ merged_results ['success' ] = merged_results ['success' ] and result_update .get ("success" ,False )
532+ for k , v in result_update .items ():
533+ if k != "success" :
534+ merged_results [k ]= v
535+ if insert_list :
536+ query_insert = self .query_builder_to_insert (insert_list , let_null ).set_model (model ).compile ()
537+ result_insert = await self .__then (query_insert , False )
538+ merged_results ['success' ] = merged_results ['success' ] and result_insert .get ("success" ,False )
539+ for k , v in result_insert .items ():
540+ if k != "success" :
541+ if k in merged_results and isinstance (v ,list ):
542+ merged_results [k ].extend (v )
543+ else :
544+ merged_results [k ]= v
545+ return merged_results
546+
527547
528548 async def __then (self , query_compiled , update ):
529549 async with aiohttp .ClientSession () as session :
0 commit comments