mysql工具类

import pymysql.cursors
import sys
from contextlib import contextmanager
import traceback
import ExcelHelp as excel

from logbook import Logger, StreamHandler

StreamHandler(sys.stdout).push_application()
log = Logger('FileOperation')

"""
    pymysql.Connect()参数说明
    host(str):      MySQL服务器地址
    port(int):      MySQL服务器端口号
    user(str):      用户名
    passwd(str):    密码
    db(str):        数据库名称
    charset(str):   连接编码

    connection对象支持的方法
    cursor()        使用该连接创建并返回游标
    commit()        提交当前事务
    rollback()      回滚当前事务
    close()         关闭连接

    cursor对象支持的方法
    execute(op)     执行一个数据库的查询命令
    fetchone()      取得结果集的下一行
    fetchmany(size) 获取结果集的下几行
    fetchall()      获取结果集中的所有行
    rowcount()      返回数据条数或影响行数
    close()         关闭游标对象

"""


# charset='utf8'
class Mysql(object):
    StreamHandler(sys.stdout).push_application()
    logger = Logger('Mysql')
    # 连接数据库

    # 生产环境数据库
    __config = {
        'host': '118.190.158.239',
        'port': 3306,
        'user': 'develop',
        'password': 'B06C670823934B0B9838F96E1F8C11AC',
        'db': 'faith',
        'charset': 'utf8mb4',
        'cursorclass': pymysql.cursors.DictCursor,
    }

    # 数据库构造函数,从连接池中取出连接,并生成操作游标
    def __init__(self):
        """
        配置成员变量
        """
        # 连接对象
        self.__conn = self.__getConn()
        self.__cursor = self.__getCursor()

    def __getConn(self):
        """
        获取con连接
        :return:  con
        """
        self.__conn = pymysql.Connect(**Mysql.__config)
        return self.__conn

    def __getCursor(self):
        """
        获取游标
        :return: cursor
        """
        self.__cursor = self.__conn.cursor()
        return self.__cursor

    @contextmanager
    def __con_cursor(self):
        """
        1、定义上下文管理器,连接后自动关闭连接
        2、元组对象前面如果不带“*”、字典对象如果前面不带“**”,则作为普通的对象传递参数。
        :return:
        """
        # 打开连接
        conn = self.__getConn()
        # 打开游标
        cursor = self.__getCursor()

        try:
            yield cursor
        except Exception as ex:
            conn.rollback()
            Mysql.logger.error(repr(ex))
        finally:
            self.__conn.commit()
            self.__cursor.close()
            self.__conn.close()

    # ---------- 搜索 ----------

    def __query(self, cursor, sql, param=None):
        if param:
            count = cursor.execute(sql, param)
        else:
            count = cursor.execute(sql)
        return count

    def getOne(self, sql, param=None):
        """
        @summary: 执行查询,并取出第一条
        @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
        @param param: 可选参数,条件列表值(元组/列表)
        @return: result list/boolean 查询到的结果集
        """

        with self.__con_cursor() as cursor:
            if self.__query(cursor, sql, param) > 0:
                result = cursor.fetchone()
            else:
                result = False
            return result

    def getMany(self, sql, param=None, num=1):
        """
        @summary: 执行查询,并取出num条结果
        @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
        @param num:取得的结果条数
        @param param: 可选参数,条件列表值(元组/列表)
        @return: result list/boolean 查询到的结果集
        """
        with self.__con_cursor() as cursor:
            if self.__query(cursor, sql, param) > 0:
                result = cursor.fetchmany(num)
            else:
                result = False
            return result

    def getAll(self, sql, param=None):
        """
        @summary: 执行查询,并取出所有结果集
        @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
        @param param: 可选参数,条件列表值(元组/列表)
        @return: result list(字典对象)/boolean 查询到的结果集
        """

        with self.__con_cursor() as cursor:
            if self.__query(cursor, sql, param) > 0:
                result = cursor.fetchall()
            else:
                result = False
            return result

    def __select(self, table, cond_dict=None, order=None):
        """
        @summary: 执行条件查询,并取出所有结果集
        @cond_dict:{'name':'xiaoming'...}
        @order:'order by id desc'
        @return:  result ({"col":"val","":""},{})
        """
        consql = ' '
        if cond_dict != '':
            for k, v in cond_dict.items():
                consql = consql + k + '=' + v + ' and'
        consql = consql + ' 1=1 '
        sql = 'select * from %s where ' % table
        sql = sql + consql + order
        print
        '_select:' + sql
        return self._exeCute(sql)

    # ---------- 更新 ----------

    def update(self, sql, param=None):
        """
        @summary: 更新数据表记录
        @param sql: SQL格式及条件,使用(%s,%s)
        @param param: 要更新的  值 tuple/list
        @return: count 受影响的行数
        """
        with self.__con_cursor() as cursor:
            return cursor.execute(sql, param)

    # ---------- 删除 ----------

    def delete(self, sql, param=None):
        """
        @summary: 删除数据表记录
        @param sql: SQL格式及条件,使用(%s,%s)
        @param param: 要删除的条件 值 tuple/list
        @return: count 受影响的行数
        """

        with self.__con_cursor() as cursor:
            return cursor.execute(sql, param)

    # ---------- 插入 ----------

    # 插入一条/多条数据
    def insert(self, sql, *param):
        """
        @summary: 向数据表插入一条记录
        @param sql:要插入的SQL格式
        @param value:要插入的记录数据tuple/list
        @return: insertId
        """
        with self.__con_cursor() as cursor:
            # 执行插入操作
            cursor.executemany(sql, param)
            # cursor.execute(sql)
            # 获取最后更新的ID
            return cursor.lastrowid


if __name__ == '__main__':
    aaa = Mysql()
    # print(aaa.getOne("select * from erp_users"))
    # print(aaa.getOne("select * from erp_users WHERE id in(%s)", (19,)))
    # for item in aaa.getMany("select * from erp_users WHERE id in(19,39)", None, 5):
    #     print(item)
    # for item in aaa.getAll("select name from erp_users ORDER BY `name` asc"):
    #     print(item)
    # for item in aaa.getAll("select * from erp_users WHERE id in(%s)", (19,)):
    #     print(item)
    print(aaa.update("UPDATE erp_users SET mail =%s WHERE id = %s", ('123@789', 19)))
    # print(aaa.delete("DELETE erp_users WHERE id = %s", (19,)))
    # print(aaa.getInsertId())
    # 插入一条数据
    # print(aaa.insert("INSERT `erp_areas` (`areaName`,`charge`,`areaCode`,`is_delete`,`commission`) VALUES (%s,%s,%s,%s,%s)", ('通州片区2222ssssssd', '片区经理3', '0', '0', '0.90')))
    # 插入多条数据
    # print(aaa.insert("INSERT `erp_areas` (`areaName`,`charge`,`areaCode`,`is_delete`,`commission`) VALUES (%s,%s,%s,%s,%s)", ('通州片区2222ssssssd', '片区经理3', '0', '0', '0.90'), ('通州片区2222ssssssd', '片区经理3', '0', 
'0', '0.90')))

 

 

python生成javabean

import sys
import datetime
from unipath import *

sys.path.append("lib")
from MySQLHelper import Mysql
from io import StringIO
from logbook import Logger, StreamHandler

# sys.path.append("lib/test")
StreamHandler(sys.stdout).push_application()
log = Logger('ProcessProdect')


class StringBuilder(object):
    _file_str = None

    def __init__(self):
        self._file_str = StringIO()

    def Append(self, str):
        self._file_str.write(str)

    def AppendN(self, str):
        self._file_str.write(str + "\n")

    def __str__(self):
        return self._file_str.getvalue()


class CreateJaveBean:

    @staticmethod
    def createJaveClass(databaseName, tableName, ClassNameSuffix, filepath):
        # 类型映射
        datatypeMapping = {"varchar": "String", "int": "Integer", "bit": "Boolean", "datetime": "Date"}
        selectSql = "SELECT *  FROM information_schema. COLUMNS  WHERE TABLE_SCHEMA = '{schemaName}' AND table_name = '{tabName}';".format(schemaName=databaseName, tabName=tableName)
        mysql = Mysql()

        resultset = mysql.getAll(selectSql)
        log.info(resultset)
        sb = StringBuilder()
        # entity #####################################################################################
        sb.AppendN("package com.shouxin.modules.erp.model;")
        sb.AppendN("")
        sb.AppendN("import lombok.*;")
        sb.AppendN("import org.hibernate.annotations.DynamicUpdate;")
        sb.AppendN("import javax.persistence.*;")
        sb.AppendN("import java.util.*;")
        sb.AppendN("")
        sb.AppendN("")
        sb.AppendN("/**")
        sb.AppendN(" * 保留版权 : CopyRright (c) 2018-2018 于继业 版权所有")
        sb.AppendN(" * 文件名称 : " + tableName + "Entity.java:")
        sb.AppendN(" * 文件编号 : 1-1-1")
        sb.AppendN(" * 功能描述 : ")
        sb.AppendN(" * 文件版本 : " + datetime.datetime.now().strftime('%Y-%m-%d') + ".01")
        sb.AppendN(" * 创建人名 : 于继业")
        sb.AppendN(" * 创建日期 : " + datetime.datetime.now().strftime('%Y-%m-%d'))
        sb.AppendN(" * 修改人名 :")
        sb.AppendN(" * 修改日期 :")
        sb.AppendN(" */")
        sb.AppendN("@RequiredArgsConstructor")
        sb.AppendN("@Accessors(chain = true)")
        sb.AppendN("@ToString")
        sb.AppendN("@EqualsAndHashCode")
        sb.AppendN("@Entity")
        sb.AppendN("@DynamicUpdate")
        sb.AppendN("@Table(name = \"" + str(tableName).lower() + "\")")
        sb.AppendN("public class " + tableName + ClassNameSuffix + " {")
        sb.AppendN("")

        for data in resultset:
            # sb.Append(data["colName"] + "\t")
            # 获取注解
            sb.AppendN("/** " + data["COLUMN_COMMENT"] + " */")
            # PRI主键约束;
            # UNI唯一约束;
            # MUL可以重复。
            if data["COLUMN_KEY"].strip():
                sb.AppendN("@Id")
                sb.AppendN("@Getter")
                sb.AppendN("@Setter")
                sb.AppendN("@GeneratedValue(strategy = GenerationType.IDENTITY)")
            # 是否有版本控制
            elif str(data["COLUMN_NAME"]).lower() == "version":
                sb.AppendN("@Getter")
                sb.AppendN("@Setter")
                sb.AppendN("@Version")
            else:  # 基本格式
                sb.AppendN("@Basic")
                sb.AppendN("@Getter")
                sb.AppendN("@Setter")
            sb.AppendN("@Column(name = \"" + data["COLUMN_NAME"] + "\"" + ("" if data["IS_NULLABLE"] == "YES" else ", nullable = false") + (", length = " + str(data["CHARACTER_MAXIMUM_LENGTH"]) if data["DATA_TYPE"] == "varchar" else "") + ")")
            # sb.AppendN("@Getter(onMethod = @_({" + keyinfo + ", @Column(name = \""
            #            + data["COLUMN_NAME"] + "\""
            #            + ("" if data["IS_NULLABLE"] == "YES" else ", nullable = false")
            #            + (", length = " + str(data["CHARACTER_MAXIMUM_LENGTH"]) if data["DATA_TYPE"] == "varchar" else "") + ")}))")
            sb.AppendN("private " + datatypeMapping[data["DATA_TYPE"]] + " " + str(data["COLUMN_NAME"][0:1]).lower() + data["COLUMN_NAME"][1:] + ";")
        sb.AppendN("}")
        log.info(sb)
        with open(Path(Path(filepath), tableName + ClassNameSuffix + '.java'), 'w+', encoding='utf-8') as file:
            file.write(str(sb))

        # dao层接口#####################################################################################
        sb = StringBuilder()
        sb.AppendN("package com.shouxin.modules.erp.dao;")
        sb.AppendN("")
        sb.AppendN("import com.shouxin.modules.erp.model." + tableName + "Entity;")
        sb.AppendN("import org.hibernate.HibernateException;")
        sb.AppendN("")
        sb.AppendN("")
        sb.AppendN("/**")
        sb.AppendN(" * 保留版权 : CopyRright (c) 2018-2018 于继业 版权所有")
        sb.AppendN(" * 文件名称 : I" + tableName + "Dao.java:")
        sb.AppendN(" * 文件编号 : 1-1-1")
        sb.AppendN(" * 功能描述 : ")
        sb.AppendN(" * 文件版本 : " + datetime.datetime.now().strftime('%Y-%m-%d') + ".01")
        sb.AppendN(" * 创建人名 : 于继业")
        sb.AppendN(" * 创建日期 : " + datetime.datetime.now().strftime('%Y-%m-%d'))
        sb.AppendN(" * 修改人名 :")
        sb.AppendN(" * 修改日期 :")
        sb.AppendN(" */")
        sb.AppendN("public interface I" + tableName + "Dao extends IBaseDao<" + tableName + "Entity> {")
        sb.AppendN("")
        sb.AppendN("}")
        with open(Path(Path(filepath), "I" + tableName + 'Dao.java'), 'w+', encoding='utf-8') as file:
            file.write(str(sb))

        # dao层实现#####################################################################################
        sb = StringBuilder()
        sb.AppendN("package com.shouxin.modules.erp.dao.impl;")
        sb.AppendN("")
        sb.AppendN("import org.springframework.stereotype.Repository;")
        sb.AppendN("import org.hibernate.HibernateException;")
        sb.AppendN("import com.shouxin.modules.erp.dao.IRoleDao;")
        sb.AppendN("import com.shouxin.modules.erp.model.Role;")
        sb.AppendN("")
        sb.AppendN("")
        sb.AppendN("/**")
        sb.AppendN(" * 保留版权 : CopyRright (c) 2018-2018 于继业 版权所有")
        sb.AppendN(" * 文件名称 : " + tableName + "DaoImpl.java:")
        sb.AppendN(" * 文件编号 : 1-1-1")
        sb.AppendN(" * 功能描述 : ")
        sb.AppendN(" * 文件版本 : " + datetime.datetime.now().strftime('%Y-%m-%d') + ".01")
        sb.AppendN(" * 创建人名 : 于继业")
        sb.AppendN(" * 创建日期 : " + datetime.datetime.now().strftime('%Y-%m-%d'))
        sb.AppendN(" * 修改人名 :")
        sb.AppendN(" * 修改日期 :")
        sb.AppendN(" */")
        sb.AppendN("@Repository(\"" + str(tableName[0:1]).lower() + tableName[1:] + "Dao\")")
        sb.AppendN("public class " + tableName + "DaoImpl extends BaseDaoImpl<" + tableName + "Entity> implements I" + tableName + "Dao {")
        sb.AppendN("")
        sb.AppendN("}")
        with open(Path(Path(filepath), tableName + 'DaoImpl.java'), 'w+', encoding='utf-8') as file:
            file.write(str(sb))


if __name__ == '__main__':
    CreateJaveBean.createJaveClass("faith", "UniqueCode", "Entity", r'C:\Users\Administrator\Desktop\流程信息')

 例子

package com.shouxin.modules.erp.model;

import com.shouxin.annotation.model.AModelView;
import lombok.*;
import lombok.experimental.Accessors;
import org.hibernate.annotations.DynamicUpdate;

import javax.persistence.*;


/**
 * 保留版权 : CopyRright (c) 2018-2018 于继业 版权所有
 * 文件名称 : UniqueCodeEntity.java:
 * 文件编号 : 1-1-1
 * 功能描述 : 唯一码存储表
 * 文件版本 : 2018-01-22.01
 * 创建人名 : 于继业
 * 创建日期 : 2018-01-22
 * 修改人名 :
 * 修改日期 :
 */
@RequiredArgsConstructor
@Accessors(chain = true)
@ToString
@EqualsAndHashCode
@Entity
@DynamicUpdate
@AModelView(viewName = "view_uniquecode")
@Table(name = "uniquecode")
public class UniqueCodeEntity {

    /**
     * 唯一码
     */
    @Id
    @Getter
    @Setter
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", nullable = false)
    private Integer iD;
    /**
     * GUID
     */
    @Basic
    @Getter
    @Setter
    @Column(name = "GUID", nullable = false, length = 36, updatable = false)
    private String gUID;
    /**
     * 明码
     */
    @Basic
    @Getter
    @Setter
    @Column(name = "PublicCode", nullable = false, length = 36, updatable = false)
    private String publicCode;
    /**
     * 暗码
     */
    @Basic
    @Getter
    @Setter
    @Column(name = "PrivateCode", nullable = false, length = 36, updatable = false)
    private String privateCode;
    /**
     * 所属供应商
     */
    @Basic
    @Getter
    @Setter
    @Column(name = "VenID", nullable = false, updatable = false)
    private Integer venID;
    /**
     * 类型
     */
    @Basic
    @Getter
    @Setter
    @Column(name = "TypeID", updatable = false)
    private Integer typeID;
    /**
     * 状态
     */
    @Basic
    @Getter
    @Setter
    @Column(name = "StateID")
    private Integer stateID;
    /**
     * 所属产品
     */
    @Basic
    @Getter
    @Setter
    @Column(name = "ProID", nullable = false, updatable = false)
    private Integer proID;
}

 

posted on 2018-01-24 13:19  網絡蛀蟲  阅读(831)  评论(0编辑  收藏  举报