async def save(self, session=None, **kwargs): """ 保存--如果待保存Document包含属性_id,这执行更新操作,否则执行更新操作 :param session: 会话 :return: 已保存数据主键ID """ _c = getattr(self, '__collection_name') if _c and _c == 'TBL_MEMBER': source = getattr(self, 'source') if source and isinstance(source, int): setattr(self, 'source', str(source)) logger.info( 'The source of (%s) is %s, will be change type from %s to str' % (self.__class__, source, type(source))) save_doc = self.result_2_dict() oid = save_doc.get('_id') if oid: await self.get_async_collection().update_one({'_id': oid}, {'$set': save_doc}, upsert=True, session=session, **kwargs) else: if '_id' in save_doc.keys(): del save_doc['_id'] insert_result = await self.get_async_collection().insert_one( save_doc, session=session, **kwargs) if insert_result: oid = insert_result.inserted_id # 清除缓存 if self.__cached: CacheEngine.delete(oid) return oid
def sync_delete(self, session=None, **kwargs): """ 删除 :return: """ save_dict = self.result_2_dict() if '_id' not in save_dict.keys(): raise InvalidDocumentError('Not a valid database record.') result = self.get_sync_collection().delete_one( {'_id': ObjectId(save_dict.get('_id'))}, session=session, **kwargs) if result and result.deleted_count == 1: # 清除缓存 if self.__cached: CacheEngine.delete(getattr(self, 'oid')) return True return False
def sync_save(self, session=None, **kwargs): """ 保存--如果待保存Document包含属性_id,这执行更新操作,否则执行更新操作 :return: 已保存数据主键ID """ save_doc = self.result_2_dict() oid = save_doc.get('_id') if oid: self.get_sync_collection().update_one({'_id': oid}, {'$set': save_doc}, upsert=True, session=session, **kwargs) else: if '_id' in save_doc.keys(): del save_doc['_id'] insert_result = self.get_sync_collection().insert_one( save_doc, session=session, **kwargs) if insert_result: oid = insert_result.inserted_id # 清除缓存 if self.__cached: CacheEngine.delete(oid) return oid