Beispiel #1
0
 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
Beispiel #2
0
 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
Beispiel #3
0
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, "查询失败")
Beispiel #4
0
 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
Beispiel #5
0
    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()
Beispiel #6
0
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, '成功')
Beispiel #7
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
Beispiel #8
0
 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
Beispiel #9
0
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, '登录成功')