• 售前

  • 售后

热门帖子
入门百科

python主动天生sql语句的脚本

[复制链接]
123457148 显示全部楼层 发表于 2021-10-25 20:32:35 |阅读模式 打印 上一主题 下一主题
形貌:
工作中在数据库中创建表时,当字段许多时,比力麻烦,开发一个工具,可在excel中写好字段英文名和中文名,然后通过py生成脚本或直接在库中生成表
脚本:
  1. import tkinter
  2. from tkinter import *
  3. import tkinter.messagebox
  4. from tkinter import scrolledtext
  5. import xlrd
  6. import pymysql
  7. import os
  8. #从excel中获取字段项,组合建表语句
  9. def get_create_sql(dir_path, file_name):
  10. try:
  11.   # 打开xls文件
  12.   #excel_path = "%s%s" % (dir_path, file_name)
  13.   #print("excel_path:",excel_path)
  14.   wb = xlrd.open_workbook(filename=dir_path)
  15.   # 打开第一sheet
  16.   ws = wb.sheets()[0]
  17.   #获取行列数量
  18.   nrows = ws.nrows
  19.   #ncols = ws.ncols
  20.   #获取sheet1的名称
  21.   table_name = ws.name
  22.   #print("nrows:",nrows)
  23.   #print("ncols:",ncols)
  24.   #print("sheet1_name:",table_name)
  25.   #xlrd中行列是从0开始的
  26.   for i in range(nrows):
  27.    if i == 0: #字段英文,格式是列表
  28.     row0_data = ws.row_values(0)
  29.     #print(row0_data)
  30.    if i == 1: #字段中文,格式是列表
  31.     row1_data = ws.row_values(1)
  32.     #print(row1_data)
  33.   #将含有-字符的替换
  34.   header0 = [str(i).replace("-", "_").replace("-", "_").replace("(", "_").replace(")", "") for i in row0_data]
  35.   #print("header0:",header0)
  36.   header1 = [str(i).replace("-", "_").replace("-", "_").replace("(", "_").replace(")", "") for i in row1_data]
  37.   #print("header1:",header1)
  38.   #获取表名
  39.   table_commet = file_name.split(".")[0]
  40.   #print("table_name:",table_name)
  41.   create_sql = "CREATE TABLE `%s` (\n" % table_name
  42.   #print("create_sql:",create_sql)
  43.   header0_len = len(header0)
  44.   #print("header0_len:",header0_len)
  45.   for i in range(header0_len):
  46.    #print("i:", i,"value:",header0[i])
  47.    if i < header0_len-1:
  48.     create_sql += "`%s` varchar(255) DEFAULT NULL COMMENT '%s',\n" % (header0[i], header1[i])
  49.    if i == header0_len-1:
  50.     create_sql += "`%s` varchar(255) DEFAULT NULL COMMENT '%s'\n" % (header0[i], header1[i])
  51.   create_sql += ") ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='%s';\n" % table_commet
  52.   #print("[INFO]:[create_sql]", create_sql)
  53. except BaseException as e:
  54.   #print("[ERRO]:", str(e))
  55.   tkinter.messagebox.showerror('错误', str(e))
  56. return create_sql
  57. def to_db(create_sql,hostname,hostport,username,userpasswd,dbname):
  58. #链接数据库,执行
  59. #print(hostname,hostport,username,userpasswd,dbname)
  60. try:
  61.   db = pymysql.connect(host=hostname, port=hostport, user=username, passwd=userpasswd, db=dbname)
  62.   cursor = db.cursor()
  63.   cursor.execute(create_sql)
  64.   cursor.fetchall()
  65.   db.close()
  66.   #print("表创建成功!")
  67.   tkinter.messagebox.showinfo('提示', '表创建成功 !')
  68. except BaseException as e:
  69.   #print("表创建失败!", str(e))
  70.   tkinter.messagebox.showerror('错误', str(e))
  71. # get 变量内容
  72. def show_db():
  73. if v1.get() == '' or v2.get() == '' or v3.get() == '' or v4.get() == '' or v5.get() == '' or v6.get() == '':
  74.   tkinter.messagebox.showinfo('提示', '请先输入内容 !')
  75.   return
  76. if v1.get() == 'token**123':
  77.   tkinter.messagebox.showinfo('提示', 'author by lijiyan 2020-12-03,Thank you.')
  78.   return
  79. #print("文件路径名 :%s" % e1.get())
  80. #print("数据库IP :%s" % e2.get())
  81. #print("数据库端口 :%s" % e2.get())
  82. #print("库名 :%s" % e2.get())
  83. #print("用户名 :%s" % e2.get())
  84. #print("密码 :%s" % e2.get())
  85. #easygui.msgbox('执行完成 !')
  86. dir_pathname = e1.get()
  87. #dir_pathi = os.path.dirname(dir_pathname)
  88. file_namei = os.path.basename(dir_pathname)
  89. #print(dir_pathname,file_namei)
  90. create_sql = get_create_sql(dir_path=dir_pathname,
  91.         file_name=file_namei
  92.         )
  93. to_db(create_sql=create_sql,
  94.    hostname=e2.get(),
  95.    hostport=int(e3.get()),
  96.    dbname=e4.get(),
  97.    username=e5.get(),
  98.    userpasswd=e6.get()
  99.    )
  100. def show_sql():
  101. if v1.get() == '':
  102.   tkinter.messagebox.showinfo('提示', '请先输入内容 !')
  103.   return
  104. #print("文件路径名 :%s" % e1.get())
  105. dir_pathname = e1.get()
  106. # dir_pathi = os.path.dirname(dir_pathname)
  107. file_namei = os.path.basename(dir_pathname)
  108. # print(dir_pathname,file_namei)
  109. create_sql = get_create_sql(dir_path=dir_pathname,
  110.         file_name=file_namei
  111.         )
  112. #tkinter.messagebox.showinfo('提示', create_sql)
  113. t.delete(1.0, END)
  114. t.insert('insert', create_sql)
  115. #e8.insert('insert',create_sql)
  116. #这个可以,但样式难看
  117. #Label(top, text=create_sql,wraplength=200).grid(row=8,column=0,sticky=W+E+N+S,padx=5,pady=5,rowspan=7,columnspan=2)
  118. #初始框的声明
  119. top = tkinter.Tk()
  120. top.title("生成createsql工具v1.0")
  121. top.geometry("400x300+300+200")
  122. ## 标签控件,对Label内容进行 表格式 布局
  123. Label(top,text='文件路径名 :').grid(row=0, column=0)
  124. Label(top,text='数据库IP :').grid(row=2,column=0)
  125. Label(top,text='数据库端口 :').grid(row=3,column=0)
  126. Label(top,text='库名 :').grid(row=4,column=0)
  127. Label(top,text='用户名 :').grid(row=5,column=0)
  128. Label(top,text='密码 :').grid(row=6,column=0)
  129. #Label(top,text='sql :').grid(row=0,column=1)
  130. #定义变量
  131. v1 = StringVar()
  132. v2 = StringVar()
  133. v3 = StringVar()
  134. v4 = StringVar()
  135. v5 = StringVar()
  136. v6 = StringVar()
  137. #v8 = StringVar()
  138. # 输入控件,用于储存 输入的内容
  139. e1 = Entry(top, textvariable=v1)
  140. e2 = Entry(top, textvariable=v2)
  141. e3 = Entry(top, textvariable=v3)
  142. e4 = Entry(top, textvariable=v4)
  143. e5 = Entry(top, textvariable=v5)
  144. e6 = Entry(top, textvariable=v6, show="*")
  145. #e8 = Entry(top, textvariable=v8)
  146. # 进行表格式布局
  147. e1.grid(row=0,column=1,padx=10,pady=5)
  148. e2.grid(row=2,column=1,padx=10,pady=5)
  149. e3.grid(row=3,column=1,padx=10,pady=5)
  150. e4.grid(row=4,column=1,padx=10,pady=5)
  151. e5.grid(row=5,column=1,padx=10,pady=5)
  152. e6.grid(row=6,column=1,padx=10,pady=5)
  153. #e8.grid(row=0,column=2,sticky=W+E+N+S,padx=5,pady=5,rowspan=7,columnspan=2)
  154. #文本内容较大,滚动文本框,展示文本内容
  155. t = scrolledtext.ScrolledText(top,width = 20,height = 20,wrap=WORD)
  156. t.grid(row=0,column=2,rowspan=7,columnspan=2)
  157. # 设置 button 指定 宽度 , 并且 关联 函数 , 使用表格式布局 .
  158. Button(top,text='生成sql',width=10,command=show_sql).grid(row=1,column=1,sticky=E,padx=10,pady=5)
  159. Button(top,text='入库',width=10,command=show_db).grid(row=7,column=1,sticky=W,padx=10,pady=5)
  160. Button(top,text='退出',width=10,command=top.quit).grid(row=7,column=1,sticky=E,padx=10,pady=5)
  161. mainloop()
复制代码
打包生成工具:
在资源栏
excel说明:
第一行,表字段英文名称
第二行,表字段中文名称
第三行,表数据,可不写
到此这篇关于python主动生成sql语句的脚本的文章就先容到这了,更多干系python主动生成sql语句内容请搜索脚本之家从前的文章或继续欣赏下面的干系文章盼望各人以后多多支持脚本之家!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作