最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3自動(dòng)生成MySQL數(shù)據(jù)字典的markdown文本的實(shí)現(xiàn)

 更新時(shí)間:2020年05月07日 08:34:32   作者:gxcuizy  
這篇文章主要介紹了Python3自動(dòng)生成MySQL數(shù)據(jù)字典的markdown文本的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

為啥要寫這個(gè)腳本

五一前的準(zhǔn)備下班的時(shí)候,看到同事為了做數(shù)據(jù)庫的某個(gè)表的數(shù)據(jù)字典,在做一個(gè)復(fù)雜的人工操作,就是一個(gè)字段一個(gè)字段的純手?jǐn)],那速度可想而知是多么的折磨和鍛煉人的意志和耐心,反正就是很耗時(shí)又費(fèi)力的活,關(guān)鍵是工作效率太低了,于是就網(wǎng)上查了一下,能否有在線工具可用,但是并沒有找到理想和如意的,于是吧,就干脆自己擼一個(gè),一勞永逸,說干就干的那種……

先屢一下腳本思路

第一步:輸入或修改數(shù)據(jù)庫連接配置信息,以及輸入數(shù)據(jù)表名

第二步:利用pymysql模塊連接數(shù)據(jù)庫,并判斷數(shù)據(jù)表是否存在

第三步:獲取數(shù)據(jù)表的注釋

第四步:存儲(chǔ)文件夾和文件處理,刪除已存在的文件避免重復(fù)寫入

第五步:先寫入Markdown的表頭部信息

第六步:從information_schema中查詢表結(jié)構(gòu)和相關(guān)信息

第七步:依次拼裝每個(gè)字段的Markdown文本寫入,結(jié)束并關(guān)閉相關(guān)連接

運(yùn)行環(huán)境

Python運(yùn)行環(huán)境:Windows + python3.6
用到的模塊:pymysql、os、time、pyinstaller
如未安裝的模塊,請(qǐng)使用pip instatll xxxxxx進(jìn)行安裝,例如:pip install pyinstaller

獲取數(shù)據(jù)庫連接信息的兩種方式

然是要做數(shù)據(jù)字典,那么肯定就需要先連接數(shù)據(jù)庫,而連接數(shù)據(jù)庫,自然就需要先知道數(shù)據(jù)庫的基本信息:IP地址、用戶名、登錄密碼、數(shù)據(jù)庫名等……

為了方便,我這里寫了兩種配置MySQL連接的方法:第一種是直接配置在代碼里,直接修改代碼里的連接信息就可以了;另外一種就是通過手動(dòng)輸入鏈接信息,不用修改代碼,方便快速多用。具體的完整源碼,我都上傳到同性交友網(wǎng)站GitHub了,可以點(diǎn)下面的鏈接查看……

生成可執(zhí)行文件

為了方便不同的人群方便快速的使用,可以不用安裝Python環(huán)境來執(zhí)行py腳本文件,我把相關(guān)腳本打包成Windows可直接執(zhí)行的exe文件,下載雙擊運(yùn)行即可(可能有的系統(tǒng)需要管理員權(quán)限運(yùn)行),打包的方式很簡單,就是利用pyinstaller模塊進(jìn)行快速打包,省時(shí)省力,具體更多用法大家可以網(wǎng)上查一下。

打包命令為: pyinstaller -F -i favicon.ico data_dict_input.py

執(zhí)行這個(gè)命令后,就會(huì)在當(dāng)前目錄下生成一個(gè)dict和其他的文件夾和相關(guān)文件,其中,打開dict,下面會(huì)生成一個(gè)文件名相同的exe文件data_dict_input.exe,雙擊這個(gè)文件就可以打開了,拷貝到其他地方一樣可以使用。

下面我把兩種方式的腳本,都生成了exe可執(zhí)行文件,大家可以直接點(diǎn)擊下載試用,如果下載不了,請(qǐng)直接去GitHub倉庫下載或者自己生成

  • 修改代碼的可執(zhí)行文件:data_dict_config.exe
  • 手動(dòng)輸入的可執(zhí)行文件:data_dict_input.exe

完整代碼

為了方便部分人想偷懶,不直接去交友網(wǎng)站查看,我在這里也貼一下其中的一個(gè)源碼出來吧(其實(shí)吧,我是覺得文章篇幅有點(diǎn)短,來湊字?jǐn)?shù)的,大家明白就好,看透不說透)。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
自動(dòng)生成MySQL數(shù)據(jù)表的數(shù)據(jù)字典支持多個(gè)
自動(dòng)獲取數(shù)據(jù)庫連接信息,方便多用
author: gxcuizy
date: 2020-04-30
"""

import pymysql
import os
import time


class DataDict(object):
 def __init__(self, connect_info):
 # 數(shù)據(jù)庫連接配置
 self.host_name = connect_info[0]
 self.user_name = connect_info[1]
 self.pwd = connect_info[2]
 self.db_name = connect_info[3]
 self.folder_name = 'mysql_dict'

 def run(self, table_str):
 """腳本執(zhí)行入口"""
 try:
  # 創(chuàng)建一個(gè)連接
  conn = pymysql.connect(self.host_name, self.user_name, self.pwd, self.db_name)
  # 用cursor()創(chuàng)建一個(gè)游標(biāo)對(duì)象
  cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
 except Exception:
  print('數(shù)據(jù)庫連接失敗,請(qǐng)檢查連接信息!')
  exit(1)
 table_list = table_str.split(',')
 for table_name in table_list:
  # 判斷表是否存在
  sql = "SHOW TABLES LIKE '%s'" % (table_name,)
  cursor.execute(sql)
  result_count = cursor.rowcount
  if result_count == 0:
  print('%s數(shù)據(jù)庫中%s表名不存在,無法生成……' % (self.db_name, table_name))
  continue
  # 表注釋獲取
  print('開始生成表%s的數(shù)據(jù)字典' % (table_name,))
  sql = "show table status WHERE Name = '%s'" % (table_name,)
  cursor.execute(sql)
  result = cursor.fetchone()
  table_comment = result['Comment']
  # 文件夾和文件處理
  file_path = self.folder_name + os.sep + table_name + '.md'
  self.deal_file(file_path)
  # 打開文件,準(zhǔn)備寫入
  dict_file = open(file_path, 'a', encoding='UTF-8')
  dict_file.write('#### %s %s' % (table_name, table_comment))
  dict_file.write('\n | 字段名稱 | 字段類型 | 默認(rèn)值 | 字段注釋 |')
  dict_file.write('\n | --- | --- | --- | --- |')
  # 表結(jié)構(gòu)查詢
  field_str = "COLUMN_NAME,COLUMN_TYPE,COLUMN_DEFAULT,COLUMN_COMMENT"
  sql = "select %s from information_schema.COLUMNS where table_schema='%s' and table_name='%s'" % (field_str, self.db_name, table_name)
  cursor.execute(sql)
  fields = cursor.fetchall()
  for field in fields:
  column_name = field['COLUMN_NAME']
  column_type = field['COLUMN_TYPE']
  column_default = str(field['COLUMN_DEFAULT'])
  column_comment = field['COLUMN_COMMENT']
  info = ' | ' + column_name + ' | ' + column_type + ' | ' + column_default + ' | ' + column_comment + ' | '
  dict_file.write('\n ' + info)
  # 關(guān)閉連接
  print('完成表%s的數(shù)據(jù)字典' % (table_name,))
  dict_file.close()
 cursor.close()
 conn.close()

 def deal_file(self, file_name):
 """處理存儲(chǔ)文件夾和文件"""
 # 不存在則創(chuàng)建文件夾
 if not os.path.exists(self.folder_name):
  os.mkdir(self.folder_name)
 # 刪除已存在的文件
 if os.path.isfile(file_name):
  os.unlink(file_name)

 def test_conn(self, conn_info):
 """測(cè)試數(shù)據(jù)庫連接"""
 try:
  # 創(chuàng)建一個(gè)連接
  pymysql.connect(conn_info[0], conn_info[1], conn_info[2], conn_info[3])
  return True
 except Exception:
  return False


# 程序執(zhí)行入口
if __name__ == '__main__':
 # 數(shù)據(jù)數(shù)據(jù)連接信息
 conn_info = input('請(qǐng)輸入mysql數(shù)據(jù)庫連接信息(格式為:主機(jī)IP,用戶名,登錄密碼,數(shù)據(jù)庫名),逗號(hào)分隔且輸入順序不能亂,例如:192.168.0.1,root,root,test_db:')
 conn_list = conn_info.split(',')
 while conn_info == '' or len(conn_list) != 4:
 conn_info = input('請(qǐng)正確輸入mysql數(shù)據(jù)庫連接信息(格式為:主機(jī)IP,用戶名,登錄密碼,數(shù)據(jù)庫名),逗號(hào)分隔且輸入順序不能亂,例如:192.168.0.1,root,root,test_db:')
 conn_list = conn_info.split(',')
 # 測(cè)試數(shù)據(jù)庫連接問題
 dd_test = DataDict(conn_list)
 db_conn = dd_test.test_conn(conn_list)
 while db_conn == False:
 conn_info = input('請(qǐng)正確輸入mysql數(shù)據(jù)庫連接信息(格式為:主機(jī)IP,用戶名,登錄密碼,數(shù)據(jù)庫名),逗號(hào)分隔且輸入順序不能亂,例如:192.168.0.1,root,root,test_db:')
 conn_list = conn_info.split(',')
 if len(conn_list) != 4:
  continue
 dd_test = DataDict(conn_list)
 db_conn = dd_test.test_conn(conn_list)
 # 輸入數(shù)據(jù)表名稱
 table_s = input('請(qǐng)輸入數(shù)據(jù)庫表名(例如:t_order),如需輸入多個(gè)表名請(qǐng)用英文逗號(hào)分隔(例如:t_order,t_goods),結(jié)束使用請(qǐng)輸入q:')
 dd = DataDict(conn_list)
 while table_s != 'q':
 dd.run(table_s)
 table_s = input('繼續(xù)使用請(qǐng)輸入數(shù)據(jù)庫表名(例如t_order),如需輸入多個(gè)表名請(qǐng)用英文逗號(hào)分隔(例如t_order,t_goods),結(jié)束使用請(qǐng)輸入q):')
 else:
 print('謝謝使用,再見……')
 time.sleep(1)

最后

到此這篇關(guān)于Python3自動(dòng)生成MySQL數(shù)據(jù)字典的markdown文本的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python3自動(dòng)生成markdown文本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 實(shí)現(xiàn)網(wǎng)易郵箱郵件閱讀和刪除的輔助小腳本

    python 實(shí)現(xiàn)網(wǎng)易郵箱郵件閱讀和刪除的輔助小腳本

    這篇文章主要介紹了python 如何實(shí)現(xiàn)網(wǎng)易郵箱郵件閱讀和刪除輔助的小腳本,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python中的CURL PycURL使用例子

    Python中的CURL PycURL使用例子

    這篇文章主要介紹了Python中的CURL PycURL使用例子,需要的朋友可以參考下
    2014-06-06
  • 使用Python給Excel工作表設(shè)置背景色或背景圖

    使用Python給Excel工作表設(shè)置背景色或背景圖

    Excel是工作中數(shù)據(jù)處理和分析數(shù)據(jù)的重要工具,面對(duì)海量的數(shù)據(jù)和復(fù)雜的表格,如何提高工作效率、減少視覺疲勞并提升數(shù)據(jù)的可讀性是不容忽視的問題,而給工作表設(shè)置合適的背景是表格優(yōu)化的一個(gè)有效方式,本文將介紹如何用Python給Excel工作表設(shè)置背景色或背景圖
    2024-07-07
  • PyQt5 實(shí)現(xiàn)百度圖片下載器GUI界面

    PyQt5 實(shí)現(xiàn)百度圖片下載器GUI界面

    本文主要介紹了通過 Pyqt5 實(shí)現(xiàn)一個(gè)界面化的下載器,在通過網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)各種類型的圖片的下載。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2021-12-12
  • python3之讀取redis數(shù)據(jù)帶有‘b’的問題

    python3之讀取redis數(shù)據(jù)帶有‘b’的問題

    這篇文章主要介紹了python3之讀取redis數(shù)據(jù)帶有‘b’的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python實(shí)現(xiàn)2048小游戲

    python實(shí)現(xiàn)2048小游戲

    本文給大家分享的是個(gè)人修改自某網(wǎng)友的Python實(shí)現(xiàn)2048小游戲的代碼,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03
  • 詳解flask入門模板引擎

    詳解flask入門模板引擎

    這篇文章主要介紹了詳解flask入門模板引擎,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • Python實(shí)現(xiàn)的網(wǎng)頁截圖功能【PyQt4與selenium組件】

    Python實(shí)現(xiàn)的網(wǎng)頁截圖功能【PyQt4與selenium組件】

    這篇文章主要介紹了Python實(shí)現(xiàn)的網(wǎng)頁截圖功能,結(jié)合實(shí)例形式分別描述了使用PyQt4組件與selenium組件進(jìn)行網(wǎng)頁截圖操作的相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • python破解同事的壓縮包密碼

    python破解同事的壓縮包密碼

    這篇文章主要介紹了python如何破解壓縮包密碼,幫助大家更好的利用python處理文件,感興趣的朋友可以了解下
    2020-10-10
  • Python通過format函數(shù)格式化顯示值

    Python通過format函數(shù)格式化顯示值

    這篇文章主要介紹了Python通過format函數(shù)格式化顯示值,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論

大关县| 即墨市| 绥江县| 大港区| 红河县| 梅河口市| 凯里市| 托里县| 霍林郭勒市| 盖州市| 娱乐| 历史| 青铜峡市| 瓮安县| 襄垣县| 岚皋县| 海晏县| 新田县| 武清区| 庆安县| 秦安县| 扎赉特旗| 九龙城区| 聊城市| 金门县| 永善县| 莱州市| 泾源县| 辉南县| 吉林市| 民县| 北流市| 武威市| 呼图壁县| 东阳市| 瓦房店市| 同德县| 湘西| 锡林浩特市| 山阴县| 阿勒泰市|