Example #1
0
 def aggregate(self, table_name, pipeline):
     """
     :param table_name:
     :param pipeline: a list, 每一个元素相当于一个管道操作,常见的操作包括
     匹配('$match')、属性域选择('$project')
     :return: 
     """
     try:
         cursor = BaseModel(table_name, self.location,
                            self.dbname).aggregate(pipeline)
         # data = pd.DataFrame()
         # if cursor.count():
         data = pd.DataFrame(list(cursor))
         cursor.close()
         return data
     except Exception as e:
         ExceptionInfo(e)
         return pd.DataFrame()
Example #2
0
 def read_data(cls, table_name, field=None, **kw):
     """
     一个简易的数据读取接口
     :param table_name:
     :param field:
     :param kw:
     :return:
     """
     try:
         cursor = BaseModel(table_name, cls.location,
                            cls.dbname).query(kw, field)
         data = pd.DataFrame()
         if cursor.count():
             data = pd.DataFrame(list(cursor))
     except Exception as e:
         ExceptionInfo(e)
     finally:
         cursor.close()
         return data
Example #3
0
 def min(cls, table_name, field='_id', **kw):
     """
     找到满足kw条件的field列上的最小值
     :param table_name:
     :param field:
     :param kw:
     :return:
     """
     try:
         if not isinstance(field, str):
             raise TypeError('field must be an instance of str')
         cursor = BaseModel(table_name, cls.location,
                            cls.dbname).query(sql=kw, field={field: True})
         if cursor.count():
             d = pd.DataFrame(list(cursor))
             m = d.loc[:, [field]].min()[field]
         else:
             m = None
         cursor.close()
         return m
     except Exception as e:
         raise e
Example #4
0
 def lasted_ticker(cls, code, date, table_name='ticker'):
     try:
         if isinstance(code, str):
             sc = code
         elif isinstance(code, list):
             sc = {'$in': code}
         else:
             raise TypeError("'code' must be str or list of str")
         if isinstance(date, dt.datetime):
             d = dt.datetime(date.year, date.month, date.day)
             t = {'$gte': date - dt.timedelta(minutes=1), '$lte': date}
             pass
         else:
             raise TypeError("this 'date' must be datetime")
         cursor = BaseModel(table_name, cls.location,
                            cls.dbname).aggregate([{
                                '$match': {
                                    'stock_code': sc,
                                    'date': d
                                }
                            }, {
                                '$match': {
                                    'datetime': t
                                }
                            }])
         data = pd.DataFrame(list(cursor))
         if len(data):
             data = data.sort_values(['stock_code', 'datetime'],
                                     ascending=False)
             data = data.drop_duplicates(['stock_code'], keep='first')
             data = data.reset_index(drop=True)
         cursor.close()
         return data
         pass
     except Exception as e:
         ExceptionInfo(e)
         return pd.DataFrame()
Example #5
0
    def read_data(cls,
                  code,
                  start_date,
                  end_date,
                  field=None,
                  timemerge=False,
                  **kw):
        """

        :param field:
        :param code:
        :param start_date:
        :param end_date:
        :param timemerge:
        :return:
        """
        try:
            sql = dict(stock_code=code,
                       date={
                           '$gte': start_date,
                           '$lte': end_date
                       })
            sql = dict(sql, **kw)
            cursor = BaseModel('kline_tick', cls.location,
                               cls.dbname).query(sql, field)
            if cursor.count():
                data = pd.DataFrame(list(cursor))
                data = cls.merge_time(data) if timemerge else data
                cursor.close()
                return data
            else:
                cursor.close()
                return pd.DataFrame()
        except Exception as e:
            ExceptionInfo(e)
            return pd.DataFrame()