Maison > développement back-end > Tutoriel Python > Comment utiliser Python Pymysql pour le stockage de données ?

Comment utiliser Python Pymysql pour le stockage de données ?

WBOY
Libérer: 2023-04-23 20:34:15
avant
1224 Les gens l'ont consulté

Python connecte et exploite la base de données MySQL, principalement via le module Pymysql. Nous expliquons ici comment stocker les données capturées dans une base de données MySQL.

Créez une table de données de stockage

Tout d'abord, vous devez vous assurer que la base de données MySQL a été installée sur votre ordinateur, puis procéder comme suit :

# 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)
);
Copier après la connexion

Utilisation de base de Pymysql

1) Connectez-vous à la base de données

db = pymysql.connect('localhost','root','123456','maoyandb')
Copier après la connexion

Description du paramètre :

  • localhost : L'adresse du serveur MySQL local ou l'adresse IP de la base de données distante.

  • root : le nom d'utilisateur utilisé pour se connecter aux données.

  • mot de passe : Le mot de passe utilisé pour se connecter à la base de données, le mot de passe du serveur MySQL local est "123456".

  • db : Le nom de la base de données connectée.

2) Créer un objet curseur

cursor = db.cursor()
Copier après la connexion

3) Exécuter la commande SQL

La méthode execute() est utilisée pour exécuter des instructions SQL. Comme indiqué ci-dessous :

#第一种方法:编写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'])
Copier après la connexion

4) Soumettre les données

db.commit()
Copier après la connexion

5) Fermer la base de données

cursor.close()
db.close()
Copier après la connexion

Le code complet est le suivant :

# -*-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()
Copier après la connexion

Interrogez les résultats des données comme suit :

mysql> +-------------+---------+---------------+
| nom | étoile                                                                --+
| +-------------+---------------- -- -----+-----------+
1 lignes dans l'ensemble (0,01 sec)


Il existe également une méthode plus efficace, utilisantexecutemany() pour insérer plusieurs éléments de données en même temps. Un exemple est le suivant :

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()
Copier après la connexion
Interrogez les résultats de l'insertion comme suit :

mysql> select * from movieinfo;

+-------------+-------- -- ---------+----------------+
| nom                                                                                                                  ----------------+- --------------------+

| Je ne suis pas le dieu de la médecine | Xu Zheng | 2018-07-05 |
| Bonjour, Li Huanying | 2021-02-12 |
+-------------+------------------------+--- ----- ----+
2 lignes dans l'ensemble (0,01 sec)


Modifiez le programme d'exploration

Modifiez maintenant le programme d'exploration pour stocker les données capturées dans la base de données MySQL. Comme indiqué ci-dessous :
# 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))
Copier après la connexion

La requête de base de données stocke les résultats comme suit :

mysql> sélectionnez * dans movieinfo;
+----------------+---------------------- ------------------------------------+------------+
| nom                                                                          ----------------------------------+------------ ---------+
| Je ne suis pas le Dieu de la médecine | Xu Zheng, Zhou Yiwei, Wang Chuanjun | 2018-07-05 |
| La rédemption de Shawshank | Tim Robbins, Morgan Freeman, Bob Gunton                                                                            10 |
| Livre vert | Viggo Mortensen, Mahershala Ali, Linda Cardellini | 2019-03-01 |
| Le pianiste en mer | Tim Ross, Bill · ;                                     | 2018-08-03 |
| Concubine | Leslie Cheung , Zhang Fengyi, Gong Li                                                                                                                                                                                                             , Justino Durano, Sergio Bini Busterik 2 | 020-01-03 |
| Ce tueur n'a pas trop froid | Jean Reno, Gary Ode Mann, Natalie Portman                                                        | 2010- 09-01 |
+----------------+-------------------------------- --------------------+--------------- ------+
10 lignes dans l'ensemble (0,01 sec)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal