溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Python Pymysql進行數據存儲

發(fā)布時間:2023-05-10 10:17:58 來源:億速云 閱讀:186 作者:iii 欄目:編程語言

這篇文章主要介紹“怎么使用Python Pymysql進行數據存儲”,在日常操作中,相信很多人在怎么使用Python Pymysql進行數據存儲問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用Python Pymysql進行數據存儲”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創(chuàng)建存儲數據表

首先您應該確定您的計算機上已經安裝了 MySQL 數據庫,然后再進行如下操作:

# 1. 連接到mysql數據庫
mysql -h327.0.0.1 -uroot -p123456
# 2. 建庫
create database maoyandb charset utf8;
# 3. 切換數據庫
use maoyandb;
# 4. 創(chuàng)建數據表
create table filmtab(
name varchar(100),
star varchar(400),
time varchar(30)
);

Pymysql基本使用

1) 連接數據庫

db = pymysql.connect('localhost','root','123456','maoyandb')

參數說明:

  • localhost:本地 MySQL 服務端地址,也可以是遠程數據庫的 IP 地址。

  • root:連接數據所使用的用戶名。

  • password:連接數據庫使用的密碼,本機 MySQL 服務端密碼“123456”。

  • db:連接的數據庫名稱。

2) 創(chuàng)建cursor對象

cursor = db.cursor()

3) 執(zhí)行sql命令

execute() 方法用來執(zhí)行 SQL 語句。如下所示:

#第一種方法:編寫sql語句,使用占位符傳入相應數據
sql = "insert into filmtab values('%s','%s','%s')" % ('刺殺,小說家','雷佳音','2021')
cursor.excute(sql)
第二種方法:編寫sql語句,使用列表傳參方式
sql = 'insert into filmtab values(%s,%s,%s)'
cursor.execute(sql,['刺殺,小說家','雷佳音','2021'])

4) 提交數據

db.commit()

5) 關閉數據庫

cursor.close()
db.close()

完整的代碼如下所示:

# -*-coding:utf-8-*-
import pymysql
#創(chuàng)建對象
db = pymysql.connect('localhost','root','123456','maoyandb')
cursor = db.cursor()
# sql語句執(zhí)性,單行插入
info_list = ['刺殺,小說家','雷佳音,楊冪','2021-2-12']
sql = 'insert into movieinfo values(%s,%s,%s)'
#列表傳參
cursor.execute(sql,info_list)
db.commit()
# 關閉
cursor.close()
db.close()

查詢數據結果,如下所示:

mysql> select * from movieinfo;
+-------------+-------------------+-----------+
| name        | star              | time      |
+-------------+-------------------+-----------+
| 刺殺,小說家   | 雷佳音,楊冪         | 2021-2-12 |
+-------------+-------------------+-----------+
1 rows in set (0.01 sec)

還有一種效率較高的方法,使用 executemany() 可以同時插入多條數據。示例如下:

db = pymysql.connect('localhost','root','123456','maoyandb',charset='utf8')
cursor = db.cursor()
# sql語句執(zhí)性,列表元組
info_list = [('我不是藥神','徐崢','2018-07-05'),('你好,李煥英','賈玲','2021-02-12')]
sql = 'insert into movieinfo values(%s,%s,%s)'
cursor.executemany(sql,info_list)
db.commit()
# 關閉
cursor.close()
db.close()

查詢插入結果,如下所示:

mysql> select * from movieinfo;
+-------------+-------------------+------------+
| name        | star              | time       |
+-------------+-------------------+------------+
| 我不是藥神  | 徐崢              | 2018-07-05 |
| 你好,李煥英 | 賈玲              | 2021-02-12 |
+-------------+-------------------+------------+
2 rows in set (0.01 sec)

修改爬蟲程序

下面修改一下爬蟲程序,將抓取下來的數據存儲到 MySQL 數據庫。如下所示:

# coding=gbk
from urllib import request
import re
import time
import random
from ua_info import ua_list
import pymysql
class MaoyanSpider(object):
    def __init__(self):
        #初始化屬性對象
        self.url = 'https://maoyan.com/board/4?offset={}'
        #數據庫連接對象
        self.db = pymysql.connect(
            'localhost','root','123456','maoyandb',charset='utf8')
        #創(chuàng)建游標對象
        self.cursor = self.db.cursor()
    def get_html(self,url):
        headers = {'User-Agent':random.choice(ua_list)}
        req = request.Request(url=url,headers=headers)
        res = request.urlopen(req)
        html = res.read().decode()
        # 直接解析
        self.parse_html(html)
    def parse_html(self,html):
        re_bds = '<div class="movie-item-info">.*?title="(.*?)".*?<p class="star">(.*?)</p>.*?class="releasetime">(.*?)</p>'
        pattern = re.compile(re_bds,re.S)
        r_list = pattern.findall(html)
        self.save_html(r_list)
    def save_html(self, r_list):
        L = []
        sql = 'insert into movieinfo values(%s,%s,%s)'
        # 整理數據
        for r in r_list:
            t = (
                r[0].strip(),
                r[1].strip()[3:],
                r[2].strip()[5:15]
            )
            L.append(t)
            print(L)
        # 一次性插入多條數據 L:[(),(),()]
        try:
            self.cursor.executemany(sql,L)
            # 將數據提交數據庫
            self.db.commit()
        except:
            # 發(fā)生錯誤則回滾
            self.db.rollback()
    def run(self):
        for offset in range(0,11,10):
            url = self.url.format(offset)
            self.get_html(url)
            time.sleep(random.uniform(1,3))
        # 斷開游標與數據庫連接
        self.cursor.close()
        self.db.close()
if __name__ == '__main__':
    start=time.time()
    spider = MaoyanSpider()
    spider.run()
    end=time.time()
    print("執(zhí)行時間:%.2f" % (end-start))

數據庫查詢存儲結果,如下所示:

mysql> select * from movieinfo;
+----------------+----------------------------------------------------------+------------+
| name           | star                                                     | time       |
+----------------+----------------------------------------------------------+------------+
| 我不是藥神     | 徐崢,周一圍,王傳君                                               | 2018-07-05 |
| 肖申克的救贖   | 蒂姆&middot;羅賓斯,摩根&middot;弗里曼,鮑勃&middot;岡頓                                  | 1994-09-10 |
| 綠皮書         | 維果&middot;莫騰森,馬赫沙拉&middot;阿里,琳達&middot;卡德里尼                            | 2019-03-01 |
| 海上鋼琴師     | 蒂姆&middot;羅斯,比爾&middot;努恩,克蘭倫斯&middot;威廉姆斯三世                           | 2019-11-15 |
| 小偷家族       | 中川雅也,安藤櫻,松岡茉優(yōu)                                          | 2018-08-03 |
| 霸王別姬       | 張國榮,張豐毅,鞏俐                                               | 1993-07-26 |
| 哪吒之魔童降世 | 呂艷婷,囧森瑟夫,瀚墨                                              | 2019-07-26 |
| 美麗人生       | 羅伯托&middot;貝尼尼,朱斯蒂諾&middot;杜拉諾,賽爾喬&middot;比尼&middot;布斯特里克                  | 2020-01-03 |
| 這個殺手不太冷 | 讓&middot;雷諾,加里&middot;奧德曼,娜塔莉&middot;波特曼                                   | 1994-09-14 |
| 盜夢空間       | 萊昂納多&middot;迪卡普里奧,渡邊謙,約瑟夫&middot;高登-萊維特                        | 2010-09-01 |
+----------------+----------------------------------------------------------+------------+
10 rows in set (0.01 sec)

到此,關于“怎么使用Python Pymysql進行數據存儲”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI