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;
}

用python生成基于lombok 和 hibernate 生成javabean的更多相关文章

  1. python实现基于两张图片生成圆角图标效果的方法

    python实现基于两张图片生成圆角图标效果的方法 这篇文章主要介绍了python实现基于两张图片生成圆角图标效果的方法,实例分析了Python使用pil模块进行图片处理的技巧,分享给大家供大家参考. ...

  2. 让Hibernate生成的DDL脚本自动增加注释

    我们知道可以通过Hibernate对象自动生成DDL建表语句,通过PowerDesigner工具可以反向工程生成数据字典,但是在生成的DDL中一直不能写上中文的注释,这就使我们生成的数据字典不具有可用 ...

  3. 基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v4.1.2版)

            目录:            第1版:http://blog.csdn.net/vipbooks/article/details/51912143            第2版:htt ...

  4. JSP利用freemarker生成基于word模板的word文档

    利用freemarker生成基于word模板的word文档 freemarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器 ...

  5. Hibernate学习笔记(三)Hibernate生成表单ID主键生成策略

    一. Xml方式 <id>标签必须配置在<class>标签内第一个位置.由一个字段构成主键,如果是复杂主键<composite-id>标签 被映射的类必须定义对应数 ...

  6. 用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean)

    用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean) 安装: 在help中eclise marksplace中查询JBo ...

  7. J2EE进阶(十五)MyEclipse反向工程实现从数据库反向生成实体类之Hibernate方式

    J2EE进阶(十五)MyEclipse反向工程实现从数据库反向生成实体类之Hibernate方式   反向工程又称逆向工程.   开发项目涉及到的表太多,一个一个的写JAVA实体类很是费事.MyEcl ...

  8. python 将png图片格式转换生成gif动画

    先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? https://www.zhihu.com/question/33646570/answer/157806339 这个哥们通过爬气 ...

  9. Visual Studio2012 添加服务引用时,生成基于任务操作不可用原因

    今天在添加服务引用时,发现 单选按钮 ”生成基于任务操作“不可用,原因项目选择的.net frame是3.5,调整为.net 4.5或.net4.6即可. 原因:.net4.5以下的环境不支持.

随机推荐

  1. ==和equals()方法的区别

    ==和equals()方法的区别 这是一道经典的面试题,但是很多人对其一直很困惑,最近刚好复习了他们两者的区别,现总结如下: 一.==:两端可以存放不同的数据     1.放基本数据类型:根据基本数据 ...

  2. 对list对象进行排序

    List<LjlSevOrdersVO> list = ljlSevOrdersService.findSevForOrders(ljlSevOrdersVO); //查出所有是自愿者的订 ...

  3. leetcode 之Copy List with Random Pointer(23)

    深拷贝一个链表,不同的是这个链表有个额外的随机指针.参考:http://blog.csdn.net/ljiabin/article/details/39054999 做法非常的巧妙,分成三步,一是新建 ...

  4. 22:django 配置详解

    django配置文件包含了你的django安装的所有配置信息,本节为大家详细讲解django的配置 基本知识 一个配置文件只是一个包含模块级别变量的的python模块,所有的配置变量都是大写的,哈哈哈 ...

  5. phpcms v9表单向导添加验证码

    要做留言板的功能,故用添加表单,想要在提交留言前加一个验证码的功能.网上的教程比较混乱,于是亲自实验了下,步骤如下: 首先是调用表单的页面加入验证码.表单js调用模版默认的是 \phpcms\temp ...

  6. Python3通过汉字输出拼音

    https://github.com/mozillazg/python-pinyin # pip install pypinyin from pypinyin import pinyin, lazy_ ...

  7. FFmpeg软件只是个解码编码软件,如果支持多种格式必须先安装好对应的库,下面就说下我装的库

    FFmpeg软件只是个解码编码软件,如果支持多种格式必须先安装好对应的库,下面就说下我装的库:1. 安装faad2 # wget http://downloads.sourceforge.net/fa ...

  8. 原生DOM选择器querySelector和querySelectorAll

    在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id ...

  9. Introducing the Filter Types

    The ActionFilterAttribute class implements both the IActionFilter and IResultFilter interfaces. This ...

  10. jquery键盘常见事件

    一.在看jquery的时候有几个常见的键盘事件,我写在这里: 1.keydown() keydown事件会在键盘按下时触发. 2.keyup() keyup事件会在按键释放时触发,也就是你按下键盘起来 ...