iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 21
0
AI & Data

30天 python 學習心得分享系列 第 21

Day21- Python X MySql

Mysql是最流行的一種資料庫,就讓我們來學習如何在Python中使用它吧!!


安裝

需先到環境去安裝模組,我們使用的是PyMySQL,安裝方式可參考Day3,如下圖

https://ithelp.ithome.com.tw/upload/images/20181104/20110503qxenndwz3o.jpg

安裝完成後就能import這個模組了

import pymysql

資料庫連接

首先會先在本機的MySql建立一個資料庫30days,可以透過資料庫管理工具建立資料庫,也可以於程式中下語法建立資料庫,個人比較習慣使用資料庫管理工具(ex. navicat、sequel)建立,建立資料庫完成後我們就來測試連線吧!

import pymysql

#資料庫連線設定
#可縮寫db = pymysql.connect("localhost","root","root","30days" )
db = pymysql.connect(host='localhost', port=3306, user='root', passwd='root', db='30days', charset='utf8')
#建立操作游標
cursor = db.cursor()
#SQL語法(查詢資料庫版本)
sql = 'SELECT VERSION()'
#執行語法
cursor.execute(sql)
#選取第一筆結果
data = cursor.fetchone()

print ("Database version : %s " % data)
#關閉連線
db.close()

#輸出:Database version : 5.6.35 

操作游標:獲得python執行Mysql命令的方法
print函數中使用%s是函數中格式化的用法(舊式)相當於使用format函數(參考)

成功輸出版本號代表連線正常,第一步就達成嘍,接著就是建立資料表,同資料庫可由語法建立也可透過管理工具建立,
我們先來設計資料表吧,存放的資料就是我們使用爬蟲爬回來的資訊,利用資料庫管理工具設計的表如下:
https://ithelp.ithome.com.tw/upload/images/20181104/20110503NAtlP9edaN.png

新增資料進入資料庫

import pymysql
import datetime

Now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

#資料庫連線設定
db = pymysql.connect(host='localhost', port=3306, user='root', passwd='root', db='30days', charset='utf8')
#建立操作游標
cursor = db.cursor()
#SQL語法
sql = "INSERT INTO PttSoftJob(SoftJobTitle, SoftJobLink, SoftJobTDate, SoftJobTCreatedDate) VALUES ('標題','https://www.ptt.cc/', '2018/11/01','"+ str(Now) +"')"
#執行語法

try:
  cursor.execute(sql)
  #提交修改
  db.commit()
  print('success')
except:
  #發生錯誤時停止執行SQL
  db.rollback()
  print('error')

#關閉連線
db.close()

#輸出:success

執行完後可以打開資料表就會發現資料已經成功寫入,如下圖:
https://ithelp.ithome.com.tw/upload/images/20181104/20110503BZagR2RtZB.jpg

學會了新增後就能夠將我們的爬蟲程式加入資料庫模組嘍!
在昨日的程式增加模組引入及以下程式碼

#資料庫連線設定
db = pymysql.connect(host='localhost', port=3306, user='root', passwd='root', db='30days', charset='utf8')
#建立操作游標
cursor = db.cursor()

for article in articles:
    CreatedDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    sql = "INSERT INTO PttSoftJob(SoftJobTitle, SoftJobLink, SoftJobTDate, SoftJobTCreatedDate) VALUES ('" + article['title'] + "','" + article['href'] + "', '" + article['date'] + "','"+ str(CreatedDate) +"')"

    try:
      cursor.execute(sql)
      #提交修改
      db.commit()
    except:
      #發生錯誤時停止執行SQL
      db.rollback()
      print('error')

#關閉連線
db.close()
    

大功告成嘍!!!

https://ithelp.ithome.com.tw/upload/images/20181104/201105036iatxuSgJR.jpg

文章內容如果有錯誤歡迎留言告知,可以幫忙糾正錯誤的觀念,感謝!


上一篇
Day20-爬蟲實戰3
下一篇
Day22- Python X MySql 2
系列文
30天 python 學習心得分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
lingwu
iT邦新手 5 級 ‧ 2019-11-24 23:25:00

請問我在colab上連接mysql會出現
2003, "Can't connect to MySQL server on 'locathost' ([Errno -2] Name or service not known)")
會是甚麼問題?

import pymysql
conn = pymysql.connect(
    host='locathost',
    port=3306,
    user='root',
    passwd = 'root',
    db='air'
)
cursor = conn.cursor()

這是我打的程式碼,passwd有打自己設定的密碼
我也有在mysql建立一個air的資料庫了

看更多先前的回應...收起先前的回應...
wayneli iT邦新手 5 級 ‧ 2019-11-25 15:23:49 檢舉

https://ithelp.ithome.com.tw/upload/images/20191125/20110503d1rxNGoX5A.jpg

lingwu iT邦新手 5 級 ‧ 2019-11-25 19:26:08 檢舉

改過後問題還是一樣
我在command client連是可以連的

wayneli iT邦新手 5 級 ‧ 2019-11-27 16:36:23 檢舉

有用其他的資料庫管理工具嗎?

wayneli iT邦新手 5 級 ‧ 2019-11-27 16:37:37 檢舉

可以先試試看其他管理工具,能不能連或截個圖來看看吧

我要留言

立即登入留言