ホームページ  >  記事  >  バックエンド開発  >  データストレージにPython Pymysqlを使用するにはどうすればよいですか?

データストレージにPython Pymysqlを使用するにはどうすればよいですか?

WBOY
WBOY転載
2023-04-23 20:34:151195ブラウズ

Python は、主に Pymysql モジュールを通じて MySQL データベースに接続し、操作します。ここでは、キャプチャしたデータを MySQL データベースに保存する方法を説明します。

ストレージ データ テーブルの作成

まず、MySQL データベースがコンピューターにインストールされていることを確認してから、次の手順に進みます:

# 1. 连接到mysql数据库
mysql -h227.0.0.1 -uroot -p123456
# 2. 建库
create database maoyandb charset utf8;
# 3. 切换数据库
use maoyandb;
# 4. 创建数据表
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: データへの接続に使用されるユーザー名。

  • パスワード: データベースへの接続に使用されるパスワード、ローカル MySQL サーバーのパスワードは「123456」です。

  • db: 接続されたデータベースの名前。

2) カーソル オブジェクトの作成

cursor = db.cursor()

3) SQL コマンドの実行

execute() メソッドは、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
#创建对象
db = pymysql.connect('localhost','root','123456','maoyandb')
cursor = db.cursor()
# sql语句执性,单行插入
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;
------------- ------------ - ------ -----------
| 名前 | 星 | 時間 |
------------- ------ - ------------ -----------
| 暗殺、小説家 | 雷嘉音、楊冪 | 2021-2-12 |
--- -- -------- ------------------- ----------- セット内の
1 行 (0.01 秒) )

executemany() を使用して複数のデータを同時に挿入する、より効率的な方法もあります。例は次のとおりです:

db = pymysql.connect('localhost','root','123456','maoyandb',charset='utf8')
cursor = db.cursor()
# sql语句执性,列表元组
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;
----------- -- -----------------------------
| 名前 | 星 | 時間 |
---- -- ------- ------------------- ------------
| 私は神の神ではありません。医学 | Xu Zheng | 2018 -07-05 |
| こんにちは、李華英 | Jia Ling | 2021-02-12 |
------------- ----- ------ -------- ----- セット内の
2 行 (0.01 秒)

クローラー プログラムを変更します。

以下 クローラー プログラムを変更して、キャプチャしたデータを 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')
        #创建游标对象
        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 = &#39;<div class="movie-item-info">.*?title="(.*?)".*?<p class="star">(.*?)</p>.*?class="releasetime">(.*?)</p>&#39;
        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 = &#39;insert into movieinfo values(%s,%s,%s)&#39;
        # 整理数据
        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:
            # 发生错误则回滚
            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__ == &#39;__main__&#39;:
    start=time.time()
    spider = MaoyanSpider()
    spider.run()
    end=time.time()
    print("执行时间:%.2f" % (end-start))

データベース クエリは結果を次のように保存します:

mysql>select * from movieinfo;
---------------- ------------------ -------------------------------------- ---------- --
| 名前 -------------------------------------------------------- ---- -------
|私は医学の神ではありません| Xu Zheng、Zhou Yiwei、Wang Chuanjun Dun | 1994-09-10 |
| Green Paper | Vegeta&Middot; Mo Tengsen、Machサラ & ミッドドット; アリ、リンダ & ミッドドット; カドリーニ | 2019-03-01 |
| シーピアノ部門 | ティム・ロス、ビル・ナン、クラレンス・ウィリアムズ三世 | 2019-11-15 |
| 万引き家族 | 中川雅也、sakura ando、mayu matsuoka | -08-03 |
|私の側室| Zhang Guorong、Zhang Fengyi、Gong li | mo?-26 |
|人生は美しい|ロベルト・ベルニニ、ジュスティーノ・デュラノ、 Sergio Bini Busterik | 2020-01-03 |
| この殺人者は冷たすぎません | ジャン・レノ、ゲイリー・オールドマン、ナタリー・ポートマン; ディカプリオ、渡辺謙、ジョセフ・ゴードン=レヴィット---------- -------------------------------------- --- ------- -----
10 行セット (0.01 秒)

以上がデータストレージにPython Pymysqlを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。