def FindMany(self, *args, **kwargs): where = parse_args(args, kwargs) table = self.connection.table(self) items = table.find(where) if not items: return [] items = [Map(decode_id(item)) for item in items] return items
def FindMany(self, *args, **kwargs): self.reset() where = parse_args(args, kwargs, _depth=4) items = self.where(where).get() if not items: return None items = [Map(item) for item in items] return items
def all(self): sql = self._compile_select() try: result = self.connection.execute(sql, DictCursor) except Exception as e: print(sql) raise e return [Map(index) for index in result]
def FindOne(self, *args, **kwargs): self.reset() where = parse_args(args, kwargs, _depth=4) items = self.where(where).limit(1).get() if not items: return None item = Map(items[0]) item = self.model(item) return item
def FindOne(self, *args, **kwargs): where = parse_args(args, kwargs, _depth=4) table = self.connection.table(self) item = table.find_one(where) if not item: return None # 将字典转成Model item = Map(decode_id(item)) return item
def parse_args(args, kwargs, _depth=3): where = {} for arg in args: if type(arg) in [dict, set, Map]: arg = Map(arg, _depth=_depth) where.update(arg) elif type(arg) == str: key = get_var_name(arg, _depth=_depth) where[key] = arg where.update(kwargs) return where
def parse_args(args, kwargs, _depth=3): where = {} for arg in args: if type(arg) in [dict, set]: arg = Map(arg, _depth=_depth) arg = encode_id(arg) where.update(arg) elif type(arg) == str: key = get_var_name(arg, _depth=_depth) if key == "id": where["_id"] = ObjectId(str(arg)) else: where[key] = arg kwargs = encode_id(kwargs) where.update(kwargs) return where
def UpdateOne(self, where={}, item={}): if not where: return None where = Map(where, _depth=4) where = encode_id(where) if not item: return None if isinstance(item, self.__class__): item = item.to_dict() # 禁止更新id,_id字段 if "id" in item: item.pop("id") if "_id" in item: item.pop("_id") table = self.connection.table(self) r = table.update_one(where, {"$set": item}) return r
def UpdateOne(self, where={}, item={}): self.reset() if not where: return None if not item: return None where = Map(where, _depth=4) if isinstance(item, self.__class__): item = item.to_dict() # 禁止更新id字段 if "id" in item: item.pop("id") # 先查找第一个,然后更新 _item = self.FindOne(where) if _item: return self.where({'id': _item.id}).update(item) else: return None
def get(self): d = self.connection.get(self) self.reset() return [Map(index) for index in d]