最终效果:
U8数据库表多、字段多,写代码时经常不知道字段的含义,希望能在安装SQL PROMPT的情况下,写SQL时会有动态的提示,方便编写,如下图:
材料:
- U8的数据字典,chm格式的,需要转化为html格式,方便分析里面的内容
- 工具软件:CHMunpacker.exe,用于转化格式,网上下载一个试用版,21天试用的
- 提取数据,使用Python
代码:
Python不熟悉,有点乱,先跑出来再说
import os
import re
from bs4 import BeautifulSoup
pathIn = r'G:\桌面\U8知识文档\U811字典'
successCount = 0
def index(directory):
# like os.listdir, but traverses directory trees
stack = [directory]
files = []
while stack:
directory = stack.pop()
for file in os.listdir(directory):
fullname = os.path.join(directory, file)
if re.search('html$', file, re.I):
files.append(fullname)
else:
if os.path.isdir(fullname) and not os.path.islink(fullname):
stack.append(fullname)
return files
sql = ''
ufsystemSQL = 'use UFSYSTEM;\n'
for file in index(pathIn):
try:
html = open(file, 'rb').read()
query = BeautifulSoup(html) # 或者直接使用 BeautifulSoup(open(file))
# 获取表名
dxH1 = query.find("h1", {"class": "dxH1"}).string
dxH1 = re.sub('\s+', ' ', dxH1)
info = dxH1.split(' ')
# 只处理表格的信息,视图和存储过程不处理
if len(info) >= 2:
if info[1] == 'Table':
dataBase = query.find('div', {'id': 'projectnamebanner'}).text
dataBase = re.sub(r'\s+', '', dataBase)
tableName = info[0].strip() # 表格名称
pagebody = query.find('div', {'id': 'pagebody'})
p = pagebody.find('p')
tableComment = p.text.strip().replace("'","''") # 表格注释
columnInfoTable = query.find('table', {'class': 'columnlisttable'})
columnRows = columnInfoTable.findAll('tr')
rowsCount = len(columnRows)
rowIndex = 1
columnSQL = ""
while rowIndex < rowsCount:
cells = columnRows[rowIndex].findAll('td')
columnName = cells[1].text.split('(')[0]
columnName = re.sub(r'\s+', '', columnName).strip()
columnComment = cells[2].text.strip().replace("'","''")
columnSQL += "EXEC AddOrUpdateColnumComment '" + tableName + "', '" + columnName + "','" + columnComment + "'\n"
rowIndex += 1
if dataBase == 'ufmodel':
sql += "EXEC AddOrUpdateTableComment '" + tableName + "', '" + tableComment + "'\n"
sql += columnSQL
else:
if dataBase == 'ufsystem':
ufsystemSQL += "EXEC AddOrUpdateTableComment '" + tableName + "', '" + tableComment + "'\n"
ufsystemSQL += columnSQL
except :
print('error file: ', file)
else:
successCount+=1
print('已经处理文件数:',successCount)
print(successCount)
print(sql)
fileHandle = open(pathIn + r'\addTableAndColumnComment.sql', 'a')
fileHandle.write(sql)
fileHandle.close()
fileHandle = open(pathIn + r'\addTableAndColumnComment_UFSystemSQL.sql', 'a')
fileHandle.write(ufsystemSQL)
fileHandle.close()
运行代码就会弄出两个SQL文件,放到管理器里面去跑一遍就OK了。
结果:
U8帮助文档:
跑完后数据库情况: