IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> python数据库定时更新脚本 -> 正文阅读

[开发工具]python数据库定时更新脚本

1. 概述

? ? ? ? 通过python连接本地数据库,创建Html网页,生成数据库的表清单及每张表的结构、修改语句等。步骤如下:

1. 从git远程拉取代码
2. 读取数据库每张表结构,生成md文档
3. 为表结构md文档添加change log
4. 每张表结构md转为html
5. 构建首页导航

2. 代码实现

2.1?从git远程拉取代码?

def downloadGit(download_path,clone_path,branch_name):
    # 从远程仓库更新代码
    if os.listdir(download_path):
        print('git pull to ', download_path)
        repo = Repo(download_path)

        ## 切换到最新分支
        repo.git.checkout(branch_name)
        repo.git.pull()
        cur_branch = repo.git.branch()
        print('current branch ', cur_branch,' 代码正在拉取中...')
    # 从远程仓库下载代码
    else:
        print('clone from ', clone_path)
        Repo.clone_from(clone_path,to_path=download_path,branch='master')

2.2?读取数据库每张表结构,生成md文档


数据库表结构查询,生成表结构md文档
1. 连接数据库
2. 读取表名
3. 遍历表,读取表结构
4. 每张表保存为md文档
?

import pymysql
import os

print('hello world——convertSqlToMd')
###########################   1. 连接数据库   #############################
def connectSql():
    # 打开数据库连接
    db = pymysql.connect(
        host="host_name",
        port=port_name,
        user='user_name',
        password='password_name',
        database='database_name'
    )

    db = connectSql()
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    # 使用 execute()  方法执行 SQL 查询
    cursor.execute("SELECT VERSION()")
    # 使用 fetchone() 方法获取单条数据fetchone/所有数据fetchall
    data = cursor.fetchall()
    print ("Database version : %s " % data)
 
    # 关闭数据库连接
    db.close()
###########################   2. 读取表名   ##################################
selTables = "select table_name from information_schema.tables where table_schema='database_name' "

cursor.execute(selTables)
tableNames = cursor.fetchall()

###########################   3. 遍历表,读取表结构   #############################
###########################   4. 每张表保存为md文档   #############################
colName= '| Field    |Type    | Collation    | Null    |Key    | Default    | Extra    |Privileges    | Comment    |'
colDel = '| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |'
try:
    for tableName in tableNames:
        # 遍历每张表
        tableName = tableName[0]
        # 描述表结构
        desTable = "show full columns from " + tableName
        # 执行表结构读取
        cursor.execute(desTable)
        tableStruc = cursor.fetchall()

        # 创建md文档,解析格式化数据
        with open(os.path.join(path , '%s.md'%tableName), 'w') as f:
            # 增加页面标题
            print(os.path.join(path , '%s.md'%tableName))
            f.writelines('## %s'%tableName + '\n')
            f.writelines('------ \n')
            f.writelines(colName + '\n')
            f.writelines(colDel + '\n')

            # 遍历该表结构每行
            for i in tableStruc:
                i = list(i)
                removeNone = ['null' if i == None else i for i in i]
                line = '|' + ' | '.join(removeNone) + ' | '

                f.writelines(line + '\n')
        f.close()

2.3?为表结构md文档添加change log

? ? ? ? 组件代码结构如下,遍历该文件夹下所有时间日期的文件夹中的sql文件,sql文件名与实际表名一致,方便查找该表md文档,直接写入sql语句?

import datetime
import os
'''
1. 读取 DbScript组件 脚本语句
2. 添加到已有md文档中
'''
def addChangeLog(dbpath):

    ### md文档地址
    md_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'mySqlTabsMd')

    listdir =  os.listdir(dbpath)
    listdir.remove('deploy.yaml')
    listdir.sort(reverse=True)
    print('迭代文件夹:',listdir)

    for timedir in listdir:

        ### 遍历当前日期文件夹下 每个sql文件
        for foldername , subfolders , filenames in os.walk(dbpath +'\%s'%timedir):
              for filename in filenames:
                    if filename != 'rollback.sql':
                        ####### 读取表名 及 Sql 语句
                        tablename = filename.split('.')[0].split('-')[0]
                        filepath = os.path.join(foldername, filename)
                        sqlfile = open(filepath, "r",encoding='utf-8').read()
               
                     ####  将 change log 写进对应表md中
                    try:
                        md_file_path = os.path.join(md_path,tablename+'.md')

                        with open(md_file_path,'a') as f:
                            # 添加 时间
                            f.writelines('\n')
                            f.writelines(' - '+ timedir + '\n')
                      
                            f.writelines("```mysql \n")
                            f.write(sqlfile+ '\n')
                            f.writelines("```")
                        f.close()
                    except :
                        pass

2.4?每张表结构md转为html

? ? ? ? 将每一个表结构md文档转化为html文件,方便首页导航直接跳转。其中exts为markdown类型扩展包,能够将md文档中的样式正常加载转换为Html的样式,github.css及dracula.css为样式文件,使html样式正常/代码高亮显示等..

exts = ['markdown.extensions.extra', 'markdown.extensions.codehilite', 'markdown.extensions.tables', 'markdown.extensions.toc']
'''
md文档转为html格式
1. 格式化html页面
2. md————>html
3. 输出保存html
'''

import markdown
import os
print('hello world——md2html')
####### 1. 读取文件
def readFile(exts):
    path = os.path.dirname(os.path.abspath(__file__))
    print(path)
    ### 变量定义
    html = '''<!DOCTYPE html>
              <head>
                  <meta charset="UTF-8">
                  <meta name="viewport" content="width=device-width, initial-scale=1, minimal-ui">
                  <title>{}</title>

                   <link rel="stylesheet" href="../css/github.css">
                   <link rel="stylesheet" href="../css/dracula.css">
              </head>
              <body>
                   <article class="markdown-body">
                      {}
                  </article>
              </body>
          </html>
          '''
    for input_file in os.listdir(path+'\mySqlTabsMd'):
        table_name = input_file.split('.')[0]
        output_file =os.path.join(path,'mySqlTabsHtml' , table_name +'.html')
        print(input_file,output_file)
        md_file_path  = os.path.join(path,'mySqlTabsMd',input_file)
        md_file = open(md_file_path,"r")
        html_body_txt = md_file.read()
        md_file.close()

        md2html(table_name,html_body_txt,output_file,html,exts)

####### 2. md文档转换,html文件保存
#######    参数:标题,Htmlbody内容,输出路径,html结构参数,md扩展包
def md2html(title,html_body_txt,output_file,html,exts):

    ### md文件转为 html
    md = markdown.Markdown(extensions = exts)
    html_body = md.convert(html_body_txt)
    ### html文件保存
    html = html.format(title, html_body)
    html_file = open(output_file,"w",encoding='utf-8')
    html_file.write(html)
    html_file.close()

2.5?构建首页导航

? ? ? ? 读取数据库所有表名,循环换行写入index.md,调用md2html 方法,生成首页的Html文件

# 执行sql语句
db = connectSql()
cursor = db.cursor()
selTables = "select table_name from information_schema.tables where table_schema='zytbmdb' "
cursor.execute(selTables)
tableNames = cursor.fetchall()

注意,?title为表名,最好md文档也保持同名

for i in tableNames:
    title =  i[0]
    link = 'mySqlTabsHtml/%s.html'%title
    content = "- [{}]({})".format(title,link)
    print(content)
    f.write(content+'\n')

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 12:15:04  更:2021-12-07 12:17:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:17:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码