首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

使用 Python 動態管理 MySQL 資料庫欄位與資料插入實戰

     編輯:MySQL 綜合教學

使用 Python 動態管理 MySQL 資料庫欄位與資料插入實戰

在處理大量文檔關鍵字提取的場景中,我們常面臨一個挑戰:每份文檔超過 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:最終資料表結果

常見錯誤與解決方案

1. MySQL server has gone away (Error 2006)

長時間閒置後重新操作資料庫時常出現此錯誤。解決方法是重新建立連線:

conn = MySQLdb.connect(host='localhost', port=3306, user='root', passwd='your_password')
curs = conn.cursor()
conn.select_db('addtest')

2. UnicodeEncodeError: 'latin-1' codec can't encode characters

編碼不匹配導致,執行以下指令設定 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 基礎的情況下參考這些資源完成實作。歡迎各位指正不足之處。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved