def select(self, sql): """执行sql查询语句(select)""" with db_helper.PgHelper(self.__db, self.__is_output_sql) as db: # 执行sql语句 result = db.execute(sql) if not result: result = [] return result
def execute(self, sql): """执行sql语句,并提交事务""" with db_helper.PgHelper(self.__db, self.__is_output_sql) as db: # 执行sql语句 result = db.execute(sql) if result: db.commit() else: result = [] return result
def callback(): """ 获取指定记录 """ sql = """select * from infomation where id = 1""" # 读取记录 with db_helper.PgHelper(db_config.DB, db_config.IS_OUTPUT_SQL) as db: result = db.execute(sql) if result: # 直接输出json return web_helper.return_msg(0, '成功', result[0]) else: return web_helper.return_msg(-1, "查询失败")
def create_code(self, parent_code): """按规则生成权限组编码""" # 判断是否传入了父权限组编码 if not parent_code: with db_helper.PgHelper(db_config.DB, db_config.IS_OUTPUT_SQL) as db: ### 执行sql,获取指定父权限组编号下面的子权限组中,最大的子权限组编号 sql = 'select max(code) as code from %(table_name)s where parent_id = 0' % {'table_name': self.__table_name} result = db.execute(sql) # 如果子权限组编号为NULL,则直接添加 if not result or not result[0].get('code'): return '01' else: # 获取的权限组编号+1 code = str(convert_helper.to_int0(result[0].get('code', '')) + 1) # 子权限组编号长度求余是否有余数,是则返回时前面加0 if len(code) % 2 == 1: return '0' + code else: return code # 没有传入父权限组编码,则表示为一级权限组 else: with db_helper.PgHelper(db_config.DB, db_config.IS_OUTPUT_SQL) as db: ### 执行sql,获取指定父权限组编号下面的子权限组中,最大的子权限组编号 sql = "select max(code) as code from %(table_name)s " \ "where code like '%(parent_code1)s' and length(code) = length('%(parent_code)s') + 2" % \ {'table_name': self.__table_name, 'parent_code1': parent_code + '%', 'parent_code': parent_code} result = db.execute(sql) # 如果子权限组编号为NULL,则直接添加 if not result or not result[0].get('code'): return parent_code + '01' else: # 获取的权限组编号+1 code = str(convert_helper.to_int0(result[0].get('code', '')) + 1) # 子权限组编号长度求余是否有余数,是则返回时前面加0 if len(code) % 2 == 1: return '0' + code else: return code
def test(self): # 使用with方法,初始化数据库连接 with db_helper.PgHelper(db_config.DB, db_config.IS_OUTPUT_SQL) as db: # 设置sql执行语句 sql = """select * from manager where login_name=%s""" vars = ('admin') # 生成sql语句,并打印到控制台 print(db.execute(db.get_sql(sql, ('admin')))) db.execute('select * from product where id=1000') db.execute( 'insert into product (name, code) values (%s, %s) returning id', ('张三', '201807251234568')) db.commit()
def callback1(): """ 修改记录 """ front_cover_img = web_helper.get_form('front_cover_img', '图片') content = web_helper.get_form('content', '内容', is_check_special_char=False) # 防sql注入攻击处理 content = string_helper.filter_str(content, "'") # 防xss攻击处理 content = string_helper.clear_xss(content) # 更新记录 sql = """update infomation set front_cover_img=%s, content=%s where id=1""" vars = ( front_cover_img, content, ) # 写入数据库 with db_helper.PgHelper(db_config.DB, db_config.IS_OUTPUT_SQL) as db: db.execute(sql, vars) db.commit() # 直接输出json return web_helper.return_msg(0, '成功')
def get_list(self, column_name_list='', wheres='', page_number=None, page_size=None, orderby=None, table_name=None): """ 获取指定条件的数据库记录集 :param column_name_list: 查询字段 :param wheres: 查询条件 :param page_number: 分页索引值 :param page_size: 分页大小, 存在值时才会执行分页 :param orderby: 排序规则 :param table_name: 查询数据表,多表查询时需要设置 :return: 返回记录集总数量与分页记录集 {'records': 0, 'total': 0, 'page': 0, 'rows': []} """ # 初始化输出参数:总记录数量与列表集 data = { 'records': 0, # 总记录数 'total': 0, # 总页数 'page': 1, # 当前页面索引 'rows': [], # 查询结果(记录列表) } # 初始化查询数据表名称 if not table_name: table_name = self.__table_name # 初始化查询字段名 if not column_name_list: column_name_list = self.__column_name_list # 初始化查询条件 if wheres: # 如果是字符串,表示该查询条件已组装好了,直接可以使用 if isinstance(wheres, str): wheres = 'where ' + wheres # 如果是list,则表示查询条件有多个,可以使用join将它们用and方式组合起来使用 elif isinstance(wheres, list): wheres = 'where ' + ' and '.join(wheres) elif isinstance(wheres, list): wheres = '' # 初始化排序 if not orderby: orderby = self.__pk_name + ' desc' # 初始化分页查询的记录区间 paging = '' with db_helper.PgHelper(self.__db, self.__is_output_sql) as db: ############################################################# # 判断是否需要进行分页 if not page_size is None: ### 执行sql,获取指定条件的记录总数量 sql = 'select count(1) as records from %(table_name)s %(wheres)s ' % \ {'table_name': table_name, 'wheres': wheres} result = db.execute(sql) # 如果查询失败或不存在指定条件记录,则直接返回初始值 if not result or result[0]['records'] == 0: return data # 设置记录总数量 data['records'] = result[0].get('records') ######################################################### ### 设置分页索引与页面大小 ### if page_size <= 0: page_size = 10 # 计算总分页数量:通过总记录数除于每页显示数量来计算总分页数量 if data['records'] % page_size == 0: page_total = data['records'] // page_size else: page_total = data['records'] // page_size + 1 # 判断页码是否超出限制,超出限制查询时会出现异常,所以将页面索引设置为最后一页 if page_number < 1 or page_number > page_total: page_number = page_total # 记录总页面数量 data['total'] = page_total # 记录当前页面值 data['page'] = page_number # 计算当前页面要显示的记录起始位置(limit指定的位置) record_number = (page_number - 1) * page_size # 设置查询分页条件 paging = ' limit ' + str(page_size) + ' offset ' + str(record_number) ############################################################# ### 按条件查询数据库记录 sql = "select %(column_name_list)s from %(table_name)s %(wheres)s order by %(orderby)s %(paging)s" % \ {'column_name_list': column_name_list, 'table_name': table_name, 'wheres': wheres, 'orderby': orderby, 'paging': paging} result = db.execute(sql) if result: data['rows'] = result # 不需要分页查询时,直接在这里设置总记录数 if page_size is None: data['records'] = len(result) return data
def copy(self, values, columns): """批量更新数据""" with db_helper.PgHelper(self.__db, self.__is_output_sql) as db: # 执行sql语句 result = db.copy(values, self.__table_name, columns) return result
def post_login(): """用户登陆验证""" ############################################################## # 获取并验证客户端提交的参数 ############################################################## username = web_helper.get_form('username', '帐号') password = web_helper.get_form('password', '密码') verify = web_helper.get_form('verify', '验证码') ip = web_helper.get_ip() ############################################################## # 从session中读取验证码信息 ############################################################## s = web_helper.get_session() verify_code = s.get('verify_code') # 删除session中的验证码(验证码每提交一次就失效) if 'verify_code' in s: del s['verify_code'] s.save() # 判断用户提交的验证码和存储在session中的验证码是否相同 if verify.upper() != verify_code: return web_helper.return_msg(-1, '验证码错误') ############################################################## ### 获取登录用户记录,并进行登录验证 ### ############################################################## # # 对客户端提交上来的验证进行md5加密将转为大写(为了密码的保密性,这里进行双重md5加密,加密时从第一次加密后的密串中提取一段字符串出来进行再次加密,提取的串大家可以自由设定) # pwd = encrypt_helper.md5(encrypt_helper.md5(password)[1:30]).upper() # 对客户端提交上来的验证进行md5加密将转为大写(只加密一次) pwd = encrypt_helper.md5(password).upper() # 从数据库中读取用户信息 with db_helper.PgHelper(db_config.DB, db_config.IS_OUTPUT_SQL) as db: sql = """select * from manager where login_name=%s and login_password=%s""" vars = (username, pwd) manager_result = db.execute(db.get_sql(sql, vars)) # 判断用户记录是否存在 if not manager_result: return web_helper.return_msg(-1, '账户不存在') ############################################################## ### 验证用户登录密码与状态 ### ############################################################## # 检查登录密码输入是否正确 if pwd != manager_result[0].get('login_password', ''): return web_helper.return_msg(-1, '密码错误') # 检查该账号虽否禁用了 if manager_result[0].get('is_enable', 0) == 0: return web_helper.return_msg(-1, '账号已被禁用') ############################################################## ### 把用户信息保存到session中 ### ############################################################## manager_id = manager_result[0].get('id', 0) s['id'] = manager_id s['login_name'] = username s.save() ############################################################## ### 更新用户信息到数据库 ### ############################################################## # 更新当前管理员最后登录时间、Ip与登录次数(字段说明,请看数据字典) sql = """update manager set last_login_time=%s, last_login_ip=%s, login_count=login_count+1 where id=%s""" # 组合更新值 vars = ( 'now()', ip, manager_id, ) # 写入数据库 db.get_sql(sql, vars) return web_helper.return_msg(0, '登录成功')