Exemplo n.º 1
0
    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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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