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

最新文章

  1. LINUX端口查看
  2. 使用Concurrency Visualizer优化性能
  3. 团队开发——冲刺2.c
  4. FB面经prepare: Task Schedule
  5. WAS维护常用操作
  6. jquery mobile导致无法修改textarea的高度
  7. android系统启动时自动运行自己的程序
  8. 特殊的attribute机制
  9. AIR 移动设备上的存储控制
  10. SQL按汉语拼音首字母排序
  11. HDU 4548(美素数)
  12. Javascript中的this关键字用法详解
  13. 使用xheditor时 cloneRange错误 ext.net
  14. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week2, Optimization algorithms
  15. GoLand使用
  16. mysql解决大量time_wait
  17. python3读取excel数据
  18. [BZOJ 2299][HAOI 2011]向量 题解(裴蜀定理)
  19. Windows里如何正确安装Zookeeper以服务运行(博主推荐)(图文详解)
  20. NC审批流开发流程

热门文章

  1. Hierarchical Attention Based Semi-supervised Network Representation Learning
  2. django使用用户名或手机号码登录
  3. 算法入门系列2:k近邻算法
  4. 【python】msgpack使用
  5. DEADBEEF
  6. LeetCode239. Sliding Window Maximum
  7. [知识复习] C语言文件读写
  8. MySQL 的数据存储引擎
  9. AC日记——严酷的训练 洛谷 P2430
  10. 将xml文件转为c#对像