python脚本代码大全_【工具】代码生成器-python脚本

我觉得造轮子这件事情,是谁都可以做的。只不过做得好或者不好而已,用心了做得就要优雅一点。

之前用过java的代码生成器,什么pojodobodbo都能生成,于是我也来自己造一个轮子。

造轮子的事情是没必要做得,费神费心,还没人家做得好,那么我还是要做,就当是体验一把了,看看细节是怎么实现的。

前期准备:

一台装有python、mysql的机器和若干待生成的表。

python版本:3.6.4

python安装mysql模块:pip install pymysql。(python2安装:pip install mysql-python

目标语言:java

待生成表格:为了实现各种数据类型,我们定义一个包含多种数据类型的实体表t_model,数据结构如下。

drop table if exists t_model;

create table t_model(

f_id varchar(64) primary key not null, --varchar 主键

f_number int null,

f_datetime datetime,

f_double double

)

1023577-20171228103142222-469937745.png

目标格式:

package com.dyi.po;

import java.util.Date;

/**

* 表t_model模型

* @author WYB

*

*/

public class Model {

private String id;

private int number;

private Date date;

private double dble;

public Model() {

super();

}

public Model(String id, int number, Date date, double dble) {

super();

this.id = id;

this.number = number;

this.date = date;

this.dble = dble;

}

/**

*

* @return

*/

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

/**

*

* @return

*/

public int getNumber() {

return number;

}

public void setNumber(int number) {

this.number = number;

}

/**

*

* @return

*/

public Date getDate() {

return date;

}

public void setDate(Date date) {

this.date = date;

}

/**

*

* @return

*/

public double getDble() {

return dble;

}

public void setDble(double dble) {

this.dble = dble;

}

}

开始编写脚本

第一步:查询表结构

sql = """

select

column_name,data_type,character_maximum_length,column_key,column_comment

from information_schema.`COLUMNS`

where TABLE_NAME = "%s"

"""%tableName

cursor.execute(sql)

tableColumnList = cursor.fetchall()

第二步:分析列的类型

cursor.execute(sql)

tableColumnList = cursor.fetchall()

modelName = tableName

modelName = modelName[modelName.find("_") + 1:]

modelName = modelName[0].upper()+modelName[1:]

fieldInfoList = []

for col in tableColumnList:

colName = col[0]

colType = col[1].lower()

colLen = col[2]

priKey = col[3]

comment = col[4]

第三步:拆分字段名,处理细节,生成代码

import pymysql

##连接数据库

db = pymysql.connect("localhost","root","root","stagebo")

cursor = db.cursor()

def log(str):

print(str)

def getTableList():

log("开始查询所有数据表...")

cursor.execute("show tables")

tableList = cursor.fetchall()

tList = []

for t in tableList:

tList.append(t[0])

return tList

def getTableInfo(tableName):

log("开始获取表结构")

sql = """

select

column_name,data_type,character_maximum_length,column_key,column_comment

from information_schema.`COLUMNS`

where TABLE_NAME = "%s"

"""%tableName

cursor.execute(sql)

tableColumnList = cursor.fetchall()

modelName = tableName

modelName = modelName[modelName.find("_") + 1:]

modelName = modelName[0].upper()+modelName[1:]

fieldInfoList = []

for col in tableColumnList:

colName = col[0]

colType = col[1].lower()

colLen = col[2]

priKey = col[3]

comment = col[4]

#字段去掉“f_”

colName = colName[colName.find("_")+1:]

#colName = colName[0].upper()+colName[1:]

#判断类型

type = ""

if colType in ["varchar","nvarchar"]:

type = "String"

elif colType == "int":

type = "int"

elif colType in ["double","float"]:

type = "double"

pk = False

if priKey == "PRI":

pk = True

fieldInfoList.append([colName,type,pk])

file = open("%s.java"%modelName, "w")

code = """

package com.dyi.po;

import java.util.*;

/**

* 表%s模型

*

*/

""" %tableName

code += "public class %s {"%modelName

for item in fieldInfoList:

code += """

private %s %s; """%(item[1],item[0])

code +="""

/*

* 空构造函数

*/

public %s(){

super();

}

"""%modelName

code += """

/**

*全参数构造函数

*/

public %s("""%modelName

for item in fieldInfoList:

code += "%s %s, "%(item[1],item[0])

code = code[:-1]

code += """) {

super();"""

for item in fieldInfoList:

code += """

this.%s = %s;"""%(item[0],item[0])

code += """

}"""

for item in fieldInfoList:

t = item[1]

n = item[0]

nu = n[0].upper()+n[1:]

code += """

/**

*

* @return

*/

public %s get%s(){

return this.%s;

}

public void set%s(%s %s){

this.%s = %s;

}

"""%(t,nu,n,nu,t,n,n,n)

code += "}"

file.write(code)

file.flush()

file.close()

if __name__ == "__main__":

#查询表

tableList = getTableList()

#定义要导出的表

tableToScript = ["t_model"]

#开始遍历

for tableName in tableToScript:

if tableName not in tableList:

continue

print(tableName)

getTableInfo(tableName)

结果展示

package com.dyi.po;

import java.util.*;

/**

* 表t_model模型

*

*/

public class Model {

private String id;

private int number;

private date;

private double dble;

/*

* 空构造函数

*/

public Model(){

super();

}

/**

*全参数构造函数

*/

public Model(String id, int number, date, double dble,) {

super();

this.id = id;

this.number = number;

this.date = date;

this.dble = dble;

}

/**

*

* @return

*/

public String getId(){

return this.id;

}

public void setId(String id){

this.id = id;

}

/**

*

* @return

*/

public int getNumber(){

return this.number;

}

public void setNumber(int number){

this.number = number;

}

/**

*

* @return

*/

public getDate(){

return this.date;

}

public void setDate( date){

this.date = date;

}

/**

*

* @return

*/

public double getDble(){

return this.dble;

}

public void setDble(double dble){

this.dble = dble;

}

}

然后流程就通了,一通百通,别的就可以照旧了~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值