原理:利用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