def update_contest_statistics(result): """ 更新比赛统计数据 :param result: :return: """ count = db.select_int('select count(*) from t_ranking where contest_id=? and problem_id=? and username=?', result['contest_id'], result['problem_id'], result['user_id']) if count == 0: record = dict(contest_id=result['contest_id'], problem_id=result['problem_id'], username=result['user_id']) db.insert('t_ranking', **record) p_time = db.select_one('select AC_time from t_ranking where contest_id=? and problem_id=? and username=?', result['contest_id'], result['problem_id'], result['user_id']).get('AC_time') if p_time == 0: # 本题还没有AC if result['result'] == configs.result_code.AC: # 本题初次AC with db.connection(): submit_time = db.select_one('select submit_time from t_submission where submission_id=?', result['solution_id']).get('submit_time') # 提交时间, datetime类型 date_time = db.select_one('select contest_date, start_time from t_contest where contest_id=?', result['contest_id']) c_date = date_time.get('contest_date') # 比赛开始日期, date类型 c_time = date_time.get('start_time') # 比赛开始时间, timedelta类型 # 转换为比赛开始时间, datetime类型 contest_time = datetime.strptime(c_date.strftime('%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S') + c_time ac_time = (submit_time - contest_time).total_seconds() / 60 # 本题初次AC所用时间, 单位为分钟, float类型 with db.transaction(): db.update('update t_ranking set AC_time=? where contest_id=? and problem_id=? and username=?', ac_time, result['contest_id'], result['problem_id'], result['user_id']) # AC题目所用时间 else: db.update('update t_ranking set wrong_submit = wrong_submit + 1 where contest_id=? and problem_id=? ' 'and username=?', result['contest_id'], result['problem_id'], result['user_id'])
def select_one(cls, where, *args): ''' Find by where clause and return one result. If multiple results found, only the first one returned. If no result found, return None. ''' d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) if where else \ db.select_one('select * from %s' % cls.__table__) return cls(**d) if d else None
def get(cls,pk): """ Get by primary key """ d = db.select_one('select * from %s where %s=?' % (cls.__table__, cls.__primary_key__.name),pk) return cls(**d) if d else None
def find_first(cls, where, *args): """ Find by where clause and return one result. If multiple results found, only the first one returned. If no result found, return None. """ d = db.select_one("select * from %s %s" % (cls.__table__, where), *args) return cls(**d) if d else None
def find_first(cls, where, *args): ''' Find by where clause and return one result. if there are multiple found, only the first one returned. ''' d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(**d) if d else None
class Model(dict): """docstring for Model""" __metaclass__ = ModelMetaclass def __init__(self,**kw): super(Model,self).__init__(**kw) def __getattr__(self,key): try: return self[key] except KeyError: raise AttributeError(r"'Dict' object has no attribute '%s'" % key) def __setattr__(self,key,value): self[key] = value @classmethod def get(cls,pk): d = db.select_one('select * from %s where %s=?' % (cls.__table__,cls.__primary_key__.name),pk) return cls(**d) if d else None @classmethod def find_first(cls,where *args): d= db.select_one('select * from %s %s ' % (cls.__table__,where),*args) return cls(**d) if d else None
def find_first(cls, where, *args): """ 通过where 语句进行条件查询,返回1个查询结果。如果有多个查询结果 仅取第一个,如果没有结果,则返回None """ d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def find_first(cls, where, *args): """ 查找一条记录 """ d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def post(self): username = self.get_secure_cookie("username") # 检查是否登录 if username is None: data = {'status':False, 'msg':'您尚未登录'} json_result = json.dumps(data , ensure_ascii=False) # 把python对象编码成json格式的字符串 self.write(json_result) return # 获取post数据 recordDate = self.get_argument('historyDate', '') data = {'status':False, 'msg':'该日期无记录'} sql = "select * from `ofRecord` where username=? and recordDate=? " res = db.select_one(sql, username, recordDate) if res : # 查找成功 data['status'] = True data['msg'] = '获取成功' info = {} info['username'] = username # int值不需要编码 info['recordDate'] = res['recordDate'].encode("utf8") info['duration'] = res['duration'] info['distance'] = res['distance'] info['calorie'] = res['calorie'] info['target'] = res['target'] data['info'] = info json_result = json.dumps(data , ensure_ascii=False) # 把python对象编码成json格式的字符串 self.write(json_result)
def get(cls, pk): ''' Get by primary key. ''' d = db.select_one('select * from %s where %s=?' % (cls.__table__, cls.__primary_key__.name), pk) return cls(**d) if d else None
def post(self): # 获取cookie保证用户已登录 username = self.get_secure_cookie("username") # 检查是否登录 if username is None: data = {'status':False, 'msg':'您尚未登录'} json_result = json.dumps(data , ensure_ascii=False) # 把python对象编码成json格式的字符串 self.write(json_result) return # 获取post数据 recordDate = self.get_argument('recordDate', '') duration = int(self.get_argument('duration', '0')) distance = float(self.get_argument('distance', '0')) calorie = int(self.get_argument('calorie', '0')) target = float(self.get_argument('target', '0')) data = {'status':False, 'msg':''} sql = "select id from `ofRecord` where username=? and recordDate=?" res = db.select_one(sql, username, recordDate) if res is not None : # 已上传过,更新信息 recordID = res['id'] sql = "update `ofRecord` set recordDate=?, duration=?, distance=?, calorie=?, target=? where id=? " res = db.update(sql, recordDate, duration, distance, calorie, target, recordID) else : # 未上传过,插入信息 table = "ofRecord" kw = {"username":username, "recordDate":recordDate, "duration":duration, "distance":distance, "calorie":calorie, "target":target} res = db.insert(table, **kw) if res : # 修改成功 data['status'] = True data['msg'] = '修改成功' json_result = json.dumps(data , ensure_ascii=False) # 把python对象编码成json格式的字符串 self.write(json_result)
def find_first(cls, where, *args): """ 查询符合条件第一条记录 where WHERE 条件语句 *args 条件语句的参数 """ d = db.select_one("SELECT * FROM %s %s" % (cls.__table__, where), *args) return cls(**d) if d else None
def get_first(cls, **kwargs): """Get by attribute, return only the first result""" if len(kwargs) != 1: raise TypeError("invalid number of attributes") sql = 'select * from %s where %s=?' % (cls.__table_name__, kwargs.keys()[0]) return cls(**db.select_one(sql, kwargs.values()[0]))
def get_user(username): try: formattedUsername = format_username(username) return select_one('user',('username','password'), 'username',formattedUsername) except Exception as e: logging.error(traceback.format_exc()) print("Failed to get user")
def post(self): username = self.get_argument('email', '') birthday = self.get_argument('birthday', '') height = self.get_argument('height', '') weight = self.get_argument('weight', '') date = self.get_argument('date', '') result = self.get_argument('result', '') # 默认为修改失败 data = {'status':101, } # 修改用户的最新身高体重 sql = "update `ofUser` set birthday=?, height=?, weight=? where username=? " db.update(sql, birthday, height, weight, username) # 问卷结果 sql = "select * from `ofQuestionResult` where username=? and date=? " res = db.select_one(sql, username, date) # 今天已经测试过 if res: sql = "update `ofQuestionResult` set birthday=?, height=?, weight=?, result=? where username=? and date=? " res = db.update(sql, birthday, height, weight, result, username, date) # 今天未测试过 else: table = "ofQuestionResult" kw = {"username":username, "birthday":birthday, "height":height, "weight":weight, "date":date, "result":result} res = db.insert(table, **kw) data['status'] = 100 json_result = json.dumps(data , ensure_ascii=False) # 把python对象编码成json格式的字符串 self.write(json_result)
def post(self): username = self.get_argument('email', '') date = self.get_argument('date', '') heighScore = self.get_argument('heighScore', '') factScore = self.get_argument('factScore', '') exerciseTime = self.get_argument('exerciseTime', '') level = self.get_argument('level', '') explosive = self.get_argument('explosive', '') endurance = self.get_argument('endurance', '') exerciseData = self.get_argument('exerciseData', '') scoreData = self.get_argument('scoreData', '') # 默认为修改失败 data = {'status':101, } sql = "select * from `ofRecord` where username=? and date=? " res = db.select_one(sql, username, date) # 已有,则覆盖 if res: sql = "update `ofRecord` set heighScore=?, factScore=?, exerciseTime=?, level=?, explosive=?, endurance=?, exerciseData=?, scoreData=? where username=? and date=? " res = db.update(sql, heighScore, factScore, exerciseTime, level, explosive, endurance, exerciseData, scoreData, username, date) # 没有,则插入 else: table = "ofRecord" kw = {"username":username, "date":date, "heighScore":heighScore, "factScore":factScore, "exerciseTime":exerciseTime, "level":level, "explosive":explosive, "endurance":endurance, "exerciseData":exerciseData, "scoreData":scoreData} res = db.insert(table, **kw) data['status'] = 100 json_result = json.dumps(data , ensure_ascii=False) # 把python对象编码成json格式的字符串 self.write(json_result)
def find_first(cls,where,*args): ''' Find by where clause and return one result ,if multiple results found, only the first one returned ,if no result found,return None ''' d = db.select_one('select * from %s %s' %(cls.__table__,where),*args) return cls(**d) if d else None
def find_first(cls, where, *args): """ Find by where clause and return one result. If multiple results found, only the first one returned. If no result found, return None. """ d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def get(cls, pk): """ Get by primary key. """ print cls d = db.select_one("select * from %s where %s=?" % (cls.__table__, cls.__primary_key__.name), pk) return cls(**d) if d else None
def find_first(cls, where, *args): """ 通过where语句进行条件查询,返回1个查询结果。如果有多个查询结果 仅取第一个,如果没有结果,则返回None """ d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def find_first(cls, where, *args): ''' ''' d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def find_first(cls, where, *args): ''' Find by where clause and return one result. If multiple results found, only the first one returned. If no result found, return None. ''' d = db.select_one('SELECT * FROM %s %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def test_database_operations(self): #initialization of engine db.create_engine('test.db') #create Table db.update('drop table if exists User') db.update('create table User(id int primary key, name varchar(20),password varchar(20),gender varchar(8))') #insert r1 = db.insert('User',id=db.get_id(),name='user1',password='******',gender='male') r2 = db.insert('User',id=db.get_id(),name='user2',password='******',gender='female') r3 = db.insert('User',id=db.get_id(),name='user3',password='******',gender='male') self.assertEquals(r1,1) self.assertEquals(r2,1) self.assertEquals(r3,1) #test select r4 = db.select_one('select name from User where gender=?','male') r5 = db.select_all('select name from User where gender=?','male') self.assertIsInstance(r4,dict) self.assertIsInstance(r5,list) r6 = db.select_one('select name from User where gender=?','asldfkj') r7 = db.select_all('select name from User where gender=?','asldfkj') self.assertIsNone(r6) self.assertEquals(r7,[]) #test update r8 = db.update('update User SET gender=? where name=?','male','user1') r9 = db.update('update User SET gender=? where name=?','male','asdfas') r10 = db.update('update User SET name =? where gender=?','haha','male') self.assertEquals(r8,1) self.assertEquals(r9,0) self.assertEquals(r10,2) #test transactions with db.transaction(): db.insert('User',id=db.get_id(),name='user5',password='******',gender='female') db.insert('User',id=db.get_id(),name='user5',password='******',gender='male') r12 = db.select_all('select * from User where name=?','user5') self.assertEquals(len(r12),2) db.engine = None
def find_first(cls, where='', *args): """ where语句条件查询,返回第一个 用法: Class.find_first(where) """ d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def get(cls, pk): ''' 根据主键获取数据 :param pk: :return: ''' d = db.select_one('select * from %s where %s=?' % (cls.__table__, cls.__primary_key__.name), pk) return cls(**d) if d else None
def get(cls, pk): ''' Get by primary key. ''' d = db.select_one( 'SELECT * FROM %s WHERE %s=?' % (cls.__table__, cls.__primary_key__.name), pk) return cls(**d) if d else None
def get(cls, pk): """ get by primary key :param pk: :return: """ result = db.select_one('select * from %s where %s=?' % (cls.__table__, cls.__primary_key__.name), pk) return cls(**result) if result else None
def find_first(cls, where, *args): """ 条件查询,返回一个查询结果,如果查询到多个结果,也只返回第一个。 如果没有查询到结果返回None """ d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def find_by_pk(cls, pk): """ 通过主键查找 :param pk: 主键值 :return: Model类型的对象或者None """ d = db.select_one('select * from `%s` where %s=?' % (cls.__table__, cls.__primary_key__.name), pk) return cls(**d) if d else None
def get(cls, pk): #cls参数无需传入,cls就是User,调用就是User.get(pk) ''' Get by primary key. ''' d = db.select_one( 'select * from %s where %s=?' % (cls.__table__, cls.__primary_key__.name), pk) return cls(d) if d else None #cls(d)等价于User(d),d 是个dict
def get(cls, pk): ''' Get by primary key ''' d = db.select_one( 'select * from `%s` where %s=?' % (cls.__table__, cls.__primary_key__.name), pk) return cls(**d) if d else None
def find_first(cls, where, *args): """ User.find_first('where id=?', 9999) :return cls() or None """ r = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(**r) if r else None
def get(cls, key_name, key_value): """ Get by primary/unique key. """ d = db.select_one('select * from %s where %s=?' % (cls.__table__, key_name), key_value) if not d: # TODO: change to logging? raise AttributeError("Can't find in [%s] where %s=[%s]" % (cls.__table__, key_name, key_value)) return cls(**d) if d else None
def find_first(cls, where, *args): ''' 通过where语句进行条件查询,返回1个查询结果。如果有多个查询结果 仅取第一个,如果没有结果,则返回None Find by where clause and return one result. If multiple results found, only the first one returned. If no result found, return None. ''' d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def find_first(cls, where, *args): ''' 通过 where 语句进行条件查询,返回 1 个 查询结果 如有多个结果,仅取第一个;如没有结果,返回 None Like 'select * from table where arg=%s' ''' d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def find_first(cls, where, *args): """ find one ,if get many, only one :param where: :param args: :return: """ d = db.select_one('select * from `%s` %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def get(cls, primary_key): """ 返回cls的对象 """ # return db.select_one('select * from %s where %s =?' % (cls.__table__, cls.__primary_key__.name), primary_key) r = db.select_one( 'select * from %s where %s =?' % (cls.__table__, cls.__primary_key__.name), primary_key) return cls(**r) if r else None
def get(cls, pk): ''' @summary: 通过primary_key从表中查询 ''' d = db.select_one( 'select * from %s where %s=?' % (cls.__table__, cls.__primary_key__.name), pk) # 将查询结果转换成一个Model子类,并返回。 return cls(**d) if d else None
def find_first(cls, where, *args): """ 通过where clause和条件args查找,并返回一个Model类型的对象。 如果查询结果有多个,则返回第一个。如果没有查询结果,则返回None。 :param where: where clause条例 :return: Model类型的对象或者None """ d = db.select_one('select * from `%s` %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def get(cls, **kw): sql = 'select * from `%s` where ' % cls.__table__ tmp = [] names, values = zip(*kw.items()) for name in names: tmp.append('%s=?' % name) sql += ' and '.join(tmp) d = db.select_one(sql, *values) return cls(**d)
def get(cls, pk): ''' 根据主键获取数据 :param pk: :return: ''' d = db.select_one( 'select * from %s where %s=?' % (cls.__table__, cls.__primary_key__.name), pk) return cls(**d) if d else None
def find_first(cls, where, *args): #where形如 'id=?' , 调用如:User.find_first(id=?, 100) ''' Find by where clause and return one result. If multiple results found, only the first one returned. If no result found, return None. ''' #d = db.select_one('select * from ? ?' % (cls.__table__, where), *args)也是可以的 d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(d) if d else None #cls(d)等价于User(d),d 是个dict
def find_first(cls, where, *args): ''' 根据条件查询一条记录,如果得到多条,则只取第一条 :param where: :param args: :return: ''' d = db.select_one('select * from %s %s' % (cls.__table__, where), *args) return cls(**d) if d else None
def find_first(cls, cols, where, *args): """ Find by where clause and return one result. If multiple results found, only the first one returned. If no result found, return None. """ d = db.select_one( 'select %s from %s %s' % (cols, cls.__table__, where), *args) if cols.find(',') == -1 and cols.strip() != '*': return d.values()[0] if d else None return cls(**d) if d else None
def get(cls, pk, ** kwargs): ''' Get by primary key. ''' if kwargs.has_key('sub_name'): sub_name = kwargs['sub_name'] else: sub_name = "" d = db.select_one('select * from %s%s where %s=?' % (cls.__table__, sub_name, cls.__primary_key__.name), pk) return cls(**d) if d else None
def _get_code(solution_id, pro_lang): """ 从数据库获取代码并写入work目录下对应的文件 :param solution_id: :return: """ file_name = { 'c': 'main.c', 'c++': 'main.cpp', 'java': 'Main.java', 'ruby': 'main.rb', 'perl': 'main.pl', 'pascal': 'main.pas', 'go': 'main.go', 'lua': 'main.lua', 'python2': 'main.py', 'python3': 'main.py', 'haskell': 'main.hs' } code = db.select_one('select source from t_submission where submission_id=?', solution_id).get('source') if code is None: logging.error('cannot get code of runid %s' % solution_id) return False try: work_path = os.path.join(configs.oj.work_dir, str(solution_id)) PutTask._low_level() os.mkdir(work_path) except OSError as e: if str(e).find('exist') > 0: # 文件夹已经存在 pass else: logging.error(e) return False try: real_path = os.path.join(configs.oj.work_dir, str(solution_id), file_name[pro_lang]) except KeyError as e: logging.error(e) return False try: PutTask._low_level() f = codecs.open(real_path, 'w') try: f.write(code) except: logging.error('%s not write code to file' % solution_id) return False finally: f.close() except OSError as e: logging.error(e) return False size = os.path.getsize(real_path) db.update('update t_submission set code_length=? where submission_id=?', size, solution_id) return True
def set_task_result(task_id, success, task_result=''): task = db.select_one('select id, status, max_retry, retried from tasks where id=?', task_id) kw = dict() if success: kw['status'] = _DONE kw['task_result'] = task_result else: retried = task.retried + 1 kw['retried'] = retried kw['status'] = _ERROR if task.retried >= task.max_retry else _PENDING db.update_kw('tasks', 'id=?', task_id, **kw)
def find_first(cls, where, *args, ** kwargs): ''' Find by where clause and return one result. If multiple results found, only the first one returned. If no result found, return None. ''' if kwargs.has_key('sub_name'): sub_name = kwargs['sub_name'] else: sub_name = "" d = db.select_one('select * from `%s%s` %s' % (cls.__table__, sub_name, where), *args) return cls(**d) if d else None
def post(self): username = self.get_argument('email', '') password = self.get_argument('password', '') data = {'status':103} sql = "select * from `ofUser` where username=? and password=? " res = db.select_one(sql, username, password) # 查询数据库,看用户名和密码是否正确 if res is None : # 未找到,则用户名或密码不对 pass else : # 找到,则用户名密码正确;此时可以确保本次登录成功。 data['status'] = 100 json_result = json.dumps(data , ensure_ascii=False) # 把python对象编码成json格式的字符串 self.write(json_result)
def validate(self): rv = Form.validate(self) if not rv: return False user = db.select_one('users',{'name':self.user.data}) print user if user is None: self.user.errors.append('Unknown User') return False if self.password.data != user['password']: self.password.errors.append('Invalid Password') return False self.user = User(user) return True
def set_task_result(task_id, execution_id, success, task_result=''): task = db.select_one('select id, execution_id, status, max_retry, retried from tasks where id=?', task_id) if task.execution_id != execution_id: raise TaskError('Task execution_id not match.') if task.status != _EXECUTING: raise TaskError('Task status is not executing') kw = dict() if success: kw['status'] = _DONE kw['task_result'] = task_result else: retried = task.retried + 1 kw['retried'] = retried kw['status'] = _ERROR if task.retried >= task.max_retry else _PENDING db.update_kw('tasks', 'id=?', task_id, **kw)
def update_contest_ranking(result): """ 更新比赛统计数据 :param result: :return: """ rowcount = db.update("show tables like 't_?'", result['contest_id']) if rowcount == 0: PutTask._create_ranking_table(result) count = db.select_int('select count(*) from t_? where username=?', result['contest_id'], result['user_id']) if count == 0: user = dict(username=result['user_id']) db.insert('t_%s' % result['contest_id'], **user) p_time = db.select_one('select ?_time from t_? where username=?', result['problem_id'], result['contest_id'], result['user_id'])\ .get('%s_time' % result['problem_id']) if p_time == 0: # 本题还没有AC if result['result'] == configs.result_code.AC: # 本题初次AC with db.connection(): submit_time = db.select_one('select submit_time from t_submission where submission_id=?', result['solution_id']).get('submit_time') # 提交时间, datetime类型 date_time = db.select_one('select contest_date, start_time from t_contest where contest_id=?', result['contest_id']) c_date = date_time.get('contest_date') # 比赛开始日期, date类型 c_time = date_time.get('start_time') # 比赛开始时间, timedelta类型 # 转换为比赛开始时间, datetime类型 contest_time = datetime.strptime(c_date.strftime('%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S') + c_time ac_time = (submit_time - contest_time).total_seconds() # 本题初次AC所用时间, 单位为秒, float类型 with db.transaction(): db.update('update t_? set solved = solved + 1 where username=?', result['contest_id'], result['user_id']) # AC题数 + 1 db.update('update t_? set ?_time=? where username=?', result['contest_id'], result['problem_id'], ac_time, result['user_id']) # AC题目所用时间 else: db.update('update t_? set ?_wrong = ?_wrong + 1 where username=?', result['contest_id'], result['problem_id'], result['problem_id'], result['user_id'])