封装web.py连接数据库

1.DBUtil.py
# -*- coding: utf-8 -*-

import web

DB_NAME = 'db_name'
DB_USERNAME = 'famiover'
DB_PASSWORD = 'famiover'
DB_HOST = 'localhost'
DB_PORT = 3306


class DBUtil(object):
    __conn = None

    def __init__(self):
        self.__conn = web.database(dbn="mysql", db=DB_NAME, user=DB_USERNAME, pw=DB_PASSWORD, host=DB_HOST,
                                   port=DB_PORT, charset='utf8')

    def select(self, *table, **params):
        return self.__conn.select(*table, **params)

    def query(self, sql, vars=None):
        return self.__conn.query(sql, vars)

    def insert(self, *table, **params):
        return self.__conn.insert(*table, **params)

    def delete(self, *table, **params):
        return self.__conn.delete(*table, **params)

    def update(self, *table, **params):
        return self.__conn.update(*table, **params)

    def transaction(self):
        return self.__conn.transaction()

2.sql_util.py
# -*- coding: utf-8 -*-

import web

from famiover.exception.MyException import MyException
from famiover.model.response import response
from famiover.util.db_util import DBUtil
from famiover.util.object_util import is_dict, is_empty, is_dict_not_empty

db = DBUtil()


def insert_any_table(params):
    """插入数据到任何表"""
    result = opt_validate(params)
    if not result.isOk:
        print(result.message)
    else:
        tablename = get_table_name(params)
        del params
        if is_dict_not_empty(params):
            db.insert(tablename, **params)


def delete_any_table(params):
    """删除数据从任何表"""
    result = opt_validate(params)
    if not result.isOk:
        print(result.message)
    else:
        tablename = get_table_name(params)
        params = delete_table_name(params)
        where = web.db.sqlwhere(params)
        db.delete(tablename, where=where)


def select_any_table(params):
    """简单查询数据从任何表"""
    result = opt_validate(params)
    if not result.isOk:
        print(result.message)
        exit(0)
    else:
        tablename = get_table_name(params)
        params = delete_table_name(params)
        where = web.db.sqlwhere(params)
        return db.select(tablename, where=where)


def update_any_table(params):
    """更新数据在任何表"""
    result = opt_validate(params)
    if not result.isOk:
        print(result.message)
    else:
        tablename = get_table_name(params)
        params = delete_table_name(params)
        where = web.db.sqlwhere(params)
        db.update(tablename, where=where)


def query_any_table(sql):
    """复杂查询从任何表"""
    return db.query(sql)


def get_table_name(params):
    """从字典中获取表名"""
    if is_dict(params) and params.get("tablename"):
        return params["tablename"]
    else:
        raise MyException(MyException.NoTableName)


def delete_table_name(params):
    """从字典中删除表名"""
    del params["tablename"]
    if is_dict_not_empty(params):
        return params
    else:
        # 该条件是为了形成合理的sql语法
        return {"0": 0}


def opt_validate(params):
    """数据库操作之前验证"""
    result = response()
    tablename = get_table_name(params)
    if is_empty(tablename):
        result.isOk = False
        result.message = "没有传入表名"
        return result
    return result


def db_result_to_dict(db_result):
    """数据库查询结果转为字典"""
    index = 1
    dict_result = {}
    for dbr in db_result:
        key = "rs" + str(index)
        index += 1
        dict_result[key] = dbr
    return dict_result

3.sql_test.py
# -*- coding: utf-8 -*-
from famiover.model.SMSql import get_out_user
from famiover.util.sql_util import select_any_table, query_any_table


def query1():
    dic = {'tablename': 'user', 'name': '马建强'}
    result = select_any_table(dic)
    for res in result:
        print(res)
    print(len(result))

def query2():
    begin_day = "2016-04-19"
    end_day = "2016-10-13"
    param = {"tablename": "user", "begin_day": begin_day, "end_day": end_day}
    users = get_out_user(param)
    print(users)

def query3():
    pass

def main():
    query3()

if __name__ == '__main__':
    main()

转载于:https://my.oschina.net/famiover/blog/761832

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值