昨天已經講完資料庫的增刪改查,
那接下來的部分就是要把前幾天已經抓取並寫到excel的資料內容
把他再寫到資料庫中
這邊我使用的是搭配openpyxl的方法,流程如下:
1. 使用openpyxl套件,將前幾天已寫的excel檔案讀取出來
2. 搭配使用pyMySQL套件,建立資料庫連線及做寫入的動作
3. 使用for 迴圈搭配openpyxl的sheet.insert_rows()方法,一次寫入大量資料
至於寫入大量資料的SQL語法,是參考MySQL官網-使用Python插入資料
代碼如下:
def write_from_excel_to_db(self):
"""
將已經存到excel的資料內容,寫到資料庫中
"""
# 開啟Excel文件
workbook = openpyxl.load_workbook('./test_engineer.xlsx', read_only=True)
# 選擇工作表(第一個頁籤)
sheet = workbook.worksheets[0]
# 建立mySQL連線,有錯的話印出連線錯誤
try:
# Connect to the db
connection = pymysql.connect(host='localhost',
port=8889,
user='帳號',
password='密碼',
database='資料表名稱',
cursorclass=pymysql.cursors.DictCursor)
# 建立Cursor物件
cursor = connection.cursor()
for row in sheet.insert_rows(min_row=2, values_only=True):
sql="INSERT INTO test_104_db.test_engineer(job_name, company_name, company_addr, salary, experience, education, content, detail) VALUES (%s, %s, %s, %s,%s, %s, %s, %s);"
cursor.execute(sql,(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7]))
#儲存變更
connection.commit()
except Exception as e:
print(f'資料庫連接錯誤:{e}')
寫到資料庫的途中有遇到兩個問題
1.content欄位設定type為varchar,但是爬回來的內容過大寫不進去--->更改type為text
2.有重複的公司名資料--->濾掉或者是不要設定primary key為公司名
題外話:
我在使用chatgpt詢問如何插入資料到資料庫中時,chatgpt有給出另一種解答,就是使用SQLAlchemy這個ORM套件
它讓你可以用一種比較簡單的方法,就可以將資料寫進資料庫中
(傑克~簡直太神奇啦!!)
但是有優點也有缺點,這篇文章內就有詳細講述ORM的核心概念及使用上的顧慮
有好有壞~就看專案需求來評估囉