#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import pymysql
import psycopg2


class DB():

    def __init__(self, DB_HOST, DB_PORT, DB_USER, DB_PWD, DB_NAME, DB='mysql'):
        self.DB_HOST = DB_HOST  # 设置MYSQL地址
        self.DB_PORT = DB_PORT  # 设置端口号
        self.DB_USER = DB_USER  # 设置用户名
        self.DB_PWD = DB_PWD  # 设置密码
        self.DB_NAME = DB_NAME  # 数据库名
        self.DB = DB  # 连接哪种数据库，mysql或者pgsql
        self.conn = self.getConnection()

    def getConnection(self):
        # 连接哪种数据库
        if self.DB == 'pgsql':
            return psycopg2.connect(
                host=self.DB_HOST,
                port=self.DB_PORT,
                user=self.DB_USER,
                password=self.DB_PWD,
                database=self.DB_NAME,

            )
        elif self.DB == 'mysql':
            return pymysql.Connect(
                host=self.DB_HOST,
                port=self.DB_PORT,
                user=self.DB_USER,
                password=self.DB_PWD,
                database=self.DB_NAME,
                charset='utf8'
            )
        else:
            raise ("请选择正确连接数据库方式，mysql或者pgsql")
    def close(self):
        self._close(self.conn.cursor())
    # 查询方法
    def query(self, sqlString):
        cursor = self.conn.cursor()
        cursor.execute(sqlString)
        returnData = cursor.fetchall()
        # self._close(cursor)
        return returnData


    def getConn(self):
        return self.conn

    def getCursor(self):
        return self.conn.cursor()

    # 获取单条数据
    def find_one(self, sqlString):
        cursor = self.conn.cursor()
        cursor.execute(sqlString)
        returnData = cursor.fetchone()
        self._close(cursor)
        return returnData

    # 不带参数的更新方法
    def update(self, sqlString):
        cursor = self.conn.cursor()
        cursor.execute(sqlString)
        self.conn.commit()

    # 带参数的更新方法
    def updateByParam(self, sqlString, params):
        cursor = self.conn.cursor()
        cursor.execute(sqlString, params)
        self.conn.commit()
        self._close(cursor)

    # 关闭回收资源
    def _close(self, cursor):
        cursor.close()
        self.conn.close()


# if __name__ == "__main__":
    # db = DB('localhost', 3306, 'root', '123456', 'zuqiu')
    # sql = "show create table dc_sclassinfo;"
    # result = db.query(sql)
    # pycomm.toLog(result)
