Pythone 3自動生成MySQLデータ辞書のmarkdownテキストの実現


なぜこの脚本を書きますか?
メーデー前の仕事の準備が終わった時、同僚がデータベースのある表のデータ辞書を作るために、複雑な人工操作をしています。フィールド一つのフィールドを使っています。オンラインで使えるものがあるかどうかは分かりませんが、理想と思いどおりのものは見つけられませんでした。ですから、自分で一つを選んで、いつまでも働いて、やればできるというような…
まず何度も脚本の考えを述べます。
ステップ1:データベース接続の設定情報を入力または変更し、データテーブル名を入力します。
第二ステップ:pymysqlモジュールを利用してデータベースに接続し、データテーブルが存在するかどうかを判断する。
ステップ3:データテーブルのコメントを取得する
第4ステップ:フォルダとファイル処理を保存し、既存のファイルを削除して重複書き込みを避ける。
ステップ5:まずMarkdownの表ヘッダ情報を書き込みます。
ステップ6:informationからschemaでテーブル構造と関連情報を調べます。
ステップ7:各フィールドのMarkdownテキストを順次綴り込み、関連する接続を終了します。
実行環境
Python運行環境:Windows+python 3.6
使用するモジュール:pymysql、os、time、pyinstaller
インストールされていないモジュールの場合は、pip install xxxxxを使ってインストールしてください。例えば、pip install pyinstaller
データベース接続情報を取得する2つの方法
データ辞書を作るには、まずデータベースに接続する必要があります。データベースに接続するには、まずデータベースの基本情報を知る必要があります。IPアドレス、ユーザー名、ログインパスワード、データベース名など…
便利さのために、私はここで二つの構成MySQL接続の方法を書きました。一つ目は直接コードに配置して、コードの中の接続情報を直接修正すればいいです。もう一つは、リンク情報を手動で入力することで、コードを変更する必要がなく、素早く多く使うことができます。具体的なソースコードは、同性の交友サイトGitHubにアップロードしました。下のリンクをクリックしてみてもいいです。
  • 修正コードの完全なソースコード:data_dictconfig.py
  • 手動入力の完全なソースコード:data_dictinput.py
  • 実行可能ファイルを生成
    さまざまな人の便利さと高速のために、Python環境をインストールしてpyスクリプトファイルを実行しなくてもいいです。関連スクリプトをWindowsで直接実行できるexeファイルに包装して、ダブルクリックして実行してもいいです。具体的な使い方はネットで調べられます。
    パッケージコマンドはpyinstallerです。
    このコマンドを実行すると、現在のディレクトリの下に、dictと他のフォルダと関連ファイルが生成されます。dictを開いて、次のファイル名が同じexeファイルpyinstaller -F -i favicon.ico data_dict_input.pyが生成されます。このファイルをダブルクリックして開くことができます。他の場所にコピーして、同じように使用できます。
    以下は2つの方式のスクリプトを、exe実行可能ファイルを作成しました。直接クリックしてダウンロードしてみてもいいです。ダウンロードできないなら、直接にGitHub倉庫にダウンロードしてください。または自分で作成してください。
  • コードの実行可能ファイルを修正します。dictconfig.exe
  • 手動入力の実行可能ファイル:data_dictinput.exe
  • 完全コード
    一部の人が怠けたくて、直接友達と付き合うサイトを調べないために、私もここにソースコードを貼ってきます。
    
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
        MySQL            
               ,    
    author: gxcuizy
    date: 2020-04-30
    """
    
    import pymysql
    import os
    import time
    
    
    class DataDict(object):
     def __init__(self, connect_info):
     #        
     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):
     """      """
     try:
      #       
      conn = pymysql.connect(self.host_name, self.user_name, self.pwd, self.db_name)
      #  cursor()        
      cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
     except Exception:
      print('       ,       !')
      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    %s     ,    ……' % (self.db_name, table_name))
      continue
      #      
      print('     %s     ' % (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)
      #     ,    
      dict_file = open(file_path, 'a', encoding='UTF-8')
      dict_file.write('#### %s %s' % (table_name, table_comment))
      dict_file.write('
    | | | | |') dict_file.write('
    | --- | --- | --- | --- |') # 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('
    ' + info) # print(' %s ' % (table_name,)) dict_file.close() cursor.close() conn.close() def deal_file(self, file_name): """ """ # 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): """ """ try: # pymysql.connect(conn_info[0], conn_info[1], conn_info[2], conn_info[3]) return True except Exception: return False # if __name__ == '__main__': # conn_info = input(' mysql ( : IP, , , ), , :192.168.0.1,root,root,test_db:') conn_list = conn_info.split(',') while conn_info == '' or len(conn_list) != 4: conn_info = input(' mysql ( : IP, , , ), , :192.168.0.1,root,root,test_db:') conn_list = conn_info.split(',') # dd_test = DataDict(conn_list) db_conn = dd_test.test_conn(conn_list) while db_conn == False: conn_info = input(' mysql ( : IP, , , ), , :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) # table_s = input(' ( :t_order), ( :t_order,t_goods), q:') dd = DataDict(conn_list) while table_s != 'q': dd.run(table_s) table_s = input(' ( t_order), ( t_order,t_goods), q):') else: print(' , ……') time.sleep(1)
    最後に
    ここで、Python 3が自動的にMySQLデータ辞書を生成するmarkdownテキストの実現に関する記事を紹介します。これに関連して、Python 3が自動的にmarkdownテキストの内容を生成します。以前の文章を検索してください。または、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。