利用Python給mysql數據庫表格批量添加註釋

原理:利用sql的concat來組合表格的基本信息

在這裏插入圖片描述
先利用sql進行表格的信息查詢來製作執行語句(網上輪子):

SELECT     
concat(    
    'alter table ',     
    table_schema, '.', table_name,     
    ' modify column ', column_name, ' ', column_type, ' ',     
    if(is_nullable = 'YES', ' ', 'not null '),     
    if(column_default IS NULL, '',     
        if(    
            data_type IN ('char', 'varchar')     
            OR     
            data_type IN ('date', 'datetime', 'timestamp') AND column_default != 'CURRENT_TIMESTAMP',     
            concat(' default ''', column_default,''''),     
            concat(' default ', column_default)    
        )    
    ),     
    if(extra is null or extra='','',concat(' ',extra)),  
    ' comment ''', column_comment, ''';'    
) '組合語句'    
FROM information_schema.columns    
WHERE table_schema = 'test_1' -- 庫名    
    AND table_name = 'h_test' -- 表名

這裏就查詢並且構造了‘test_1’庫的‘h_test’表格的信息,查詢出來如下:

在這裏插入圖片描述

  • 可以看到,已經成功構造了alter執行語句,但沒有註釋的部分是個單引號,我們接下來就是對單引號的語句進行賦值便可以批量執行了

利用Python進行批量的操作

如果庫中存在多張表格的註釋需要添加,這個時候利用Python進行循環,批量添加:(這裏使用sqlalchemy模塊來控制數據庫)

1、構造庫表字段的註釋的對照字典格式>>> ‘表名’:[‘字段對應的註釋’]

dict_1 = {
        't0':['全網下單轉化率', '全網商品數', '全網搜索人氣', '全網搜索熱度', 
               '全網點擊率', '關鍵詞', '週期', '商城點擊佔比', '帶來的瀏覽量', 
               '帶來的訪客數', '引導下單買家數', '引導下單轉換率', '引導入店人均瀏覽量', 
              '引導到店鋪內的瀏覽量', '引導支付商品數', '引導支付金額', '曝光量', '直通車平均點擊單價', 
              '終端', '跳失率', 'start_name', 'end_time', 'gmt_creat'],
    ...
    '表名'['字段對應的註釋'],
}

2、構造sql語句

for k in dict_1.keys():
#    print(k)
    sql_2 = """SELECT   concat('alter table ',  table_schema, '.', table_name, ' modify column ', column_name, ' ', column_type, ' ',     
                    if(is_nullable = 'YES', ' ', 'not null '),     
                    if(column_default IS NULL, '',     
                    if( data_type IN ('char', 'varchar')     
                    OR     
                    data_type IN ('date', 'datetime', 'timestamp') AND column_default != 'CURRENT_TIMESTAMP',     
                    concat(' default ''', column_default,''''),     
                    concat(' default ', column_default)    
                    )    
                    ),     
                    if(extra is null or extra='','',concat(' ',extra)),  
                    ' comment ''', column_comment, ''';') sql_t    
                    FROM information_schema.columns    
                    WHERE table_schema = 'edw'    
                    AND table_name = '%s';"""%k

#    print(sql_2)
    # 構造sql語句
    df2 = pd.read_sql_query(sql_2, engine)
#    print(df2)

    sql_list = []
    for index,row in df2.iterrows():
        # 將單引號中的值進行替換,按照字典的鍵值+索引的方式進行替換
        sql_s = list(row.str.replace("''","'%s'"%dict_1[k][index]))
#        print(sql_s)
        # 將構造好的sql語句加載到sql的列表中
        sql_list.extend(sql_s)

3、將重新構造的sql重新進行執行就可以了(如下圖:註釋補充完整)
在這裏插入圖片描述

完整代碼大家可以點擊鏈接查看:GitHub

歡迎和我討論數據的知識

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章