在處理大量文檔關鍵字提取的場景中,我們常面臨一個挑戰:每份文檔超過 1000 字元,需取出現頻率最高的 300 個關鍵字存入資料庫。若手動建立擁有 300 個欄位的資料表,不僅繁瑣而且極易出錯。本文將示範如何使用 Python 腳本自動化完成資料庫建立、動態新增欄位以及批次插入資料的全過程。
假設我們有一個初始資料表(圖 1),僅包含基本欄位。我們的目標是以程式化方式,自動為每份文檔的關鍵字建立對應欄位(key0 至 key299),並將提取的關鍵字寫入對應列,最終形成如圖 2 所示的完整資料表結構。

圖 1:原始資料表結構

圖 2:目標資料表概覽
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
function description: 動態新增欄位與插入資料
date: 2014-08-04
author: Chicho
running: python addfileds.py
'''
import MySQLdb
# 連線資料庫設定(請依實際環境調整)
# 建議修改預設埠號 3306 以提高安全性
conn = MySQLdb.connect(
host='localhost',
port=3306,
user='root',
passwd='your_password' # 請替換為實際密碼
)
curs = conn.cursor()
# 建立資料庫 addtest(支援重複執行)
try:
curs.execute('CREATE DATABASE addtest')
except:
print('資料庫 addtest 已存在!')
conn.select_db('addtest')
# 建立基礎資料表 addfields
try:
curs.execute('''
CREATE TABLE addfields (
id INT PRIMARY KEY NOT NULL,
name TEXT
)
''')
except:
print('資料表 addfields 已存在!')
# 動態新增 300 個關鍵字欄位 (key0 ~ key299)
try:
for i in range(300):
sql = "ALTER TABLE addfields ADD key%s TEXT" % i
curs.execute(sql)
except Exception as e:
print('新增欄位錯誤:', e)
# 批次插入測試資料(5 筆文檔)
for i in range(5):
# 插入基礎欄位
curs.execute("INSERT INTO addfields SET id=%s" % i)
curs.execute("UPDATE addfields SET name='doc_%s' WHERE id=%s" % (i, i))
# 插入 300 個關鍵字
for j in range(300):
sql = "UPDATE addfields SET key%s='kw_%s_%s' WHERE id=%s" % (j, i, j, i)
curs.execute(sql)
# 關鍵步驟:提交交易,否則資料不會寫入資料庫
conn.commit()
curs.close()
conn.close()
程式執行完成後,資料表將擁有 302 個欄位(id、name、key0~key299),每筆資料對應一份文檔的關鍵字集合,如圖 3 所示。

圖 3:最終資料表結果
長時間閒置後重新操作資料庫時常出現此錯誤。解決方法是重新建立連線:
conn = MySQLdb.connect(host='localhost', port=3306, user='root', passwd='your_password')
curs = conn.cursor()
conn.select_db('addtest')
編碼不匹配導致,執行以下指令設定 UTF-8:
conn.set_character_set('utf8')
curs.execute('SET NAMES utf8')
curs.execute('SET CHARACTER SET utf8')
curs.execute('SET character_set_connection=utf8')
感謝上述作者的無私分享,筆者在無 MySQL 基礎的情況下參考這些資源完成實作。歡迎各位指正不足之處。