1. 程式人生 > 其它 >Python操作Mysql(新浪微博實戰)

Python操作Mysql(新浪微博實戰)

1、安裝命令:

  pip3 install pymysql Python 操作第三方Mysql庫

2、mysql -h localhost -y root -p 進入本地mysql

  create database testDev; 建立testDev資料庫

  create table`user` (

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(20) DEFAULT NULL,
  `last_name` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT '18',
  `sex` varchar(6) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`)
  ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;

建立表user

3、表中插入單條資訊

import pymysql
from utils.jsonutils import readJson
from utils.yamlUtils import readYaml

def insertOne():
    try:
        conn=pymysql.connect(host=readJson()["mysql"]["host"],user=readJson()["mysql"]["user"],
                             passwd=readJson()["mysql"]["passwd"],db=readJson()["
mysql"]["db"]) except Exception as e: raise e.args else: # "獲取遊標" cur=conn.cursor() sql='insert into user values (%s,%s,%s,%s,%s,%s)' params=(1,'hi','hi name',19,'boy',1008) cur.execute(sql,params) conn.commit() finally: cur.close() conn.close() insertOne()

  表中插入多條資訊

def insertMany():
    try:
        conn=pymysql.connect(host='127.0.0.1',user='root',passwd='wuyikai521',db='testDev')
    except Exception as e:
        raise e.args
    else:
        cur=conn.cursor()
        sql='insert into user values (%s,%s,%s,%s,%s,%s)'
        params=[
            (2, 'hi', 'hi name', 19, 'boy', 1010),
            (3, 'hi', 'hi name', 19, 'boy', 1019),
            (4, 'hi', 'hi name', 19, 'boy', 1020)
        ]
        cur.executemany(sql,params)
#commit提交 conn.commit()
finally: cur.close()
#關閉遊標 conn.close()
#關閉連結 insertMany()

4、查詢單條資料 利用YAML檔案分離IP 等等

def queryOne():
    try:
        conn=pymysql.connect(host=readYaml()["mysql"]["host"],user=readYaml()["mysql"]["user"],
                             passwd=readYaml()["mysql"]["passwd"],db=readYaml()["mysql"]["db"])
    except Exception as e:
        raise e.args
    else:
        cur=conn.cursor()
        sql="select * from user where id=%s;"
        params=(3,)
        cur.execute(sql,params)
        """獲取查詢的資訊"""
        data=cur.fetchone()
        print(data)
    finally:
        cur.close()
        conn.close()

queryOne()

5、修改ID為1的first_name

def updateOne():
    try:
        conn=pymysql.connect(host='127.0.0.1',user='root',passwd='wuyikai521',db='testDev')
    except Exception as e:
        raise e.args
    else:
        cur=conn.cursor()
        sql="update user set first_name=%s where id=%s;"
        params=('HA',1)
        cur.execute(sql,params)
        conn.commit()
    finally:
        cur.close()
        conn.close()
updateOne()

6、單條刪除

def deleteOne():
    try:
        conn=pymysql.connect(host='127.0.0.1',user='root',passwd='wuyikai521',db='testDev')
    except Exception as e:
        raise e.args
    else:
        cur=conn.cursor()
        sql="delete from user where id=%s;"
        params=(4,)
        cur.execute(sql,params)
        conn.commit()
    finally:
        cur.close()
        conn.close()
deleteOne()

7、查詢全部

def queryMany():
    try:
        conn=pymysql.connect(host=readJson()["mysql"]["host"],user=readJson()["mysql"]["user"],
                             passwd=readJson()["mysql"]["passwd"],db=readJson()["mysql"]["db"])
    except Exception as e:
        raise e.args
    else:
        cur=conn.cursor()
        sql="select * from user;"
        cur.execute(sql)
        """獲取查詢的資訊"""
        data=cur.fetchall()
        for item in data:
            print(item)
    finally:
        cur.close()
        conn.close()
queryMany()

8、新浪微博登入

from selenium.webdriver.common.by import By
from base.base import WebUI
import time as t

class Weibo(WebUI):
    username_loc=(By.ID,'loginname')
    password_loc=(By.NAME,'password')
    error_loc=(By.XPATH,'/html/body/div[3]/div/p/span[2]')
    clickLogin_loc=(By.XPATH,'//*[@id="pl_login_form"]/div/div[3]/div[6]/a')
    duanxin_loc=(By.ID,'messageCheck')
    receive_loc=(By.XPATH,'/html/body/div/div/div/div[1]/div/div[2]/div[3]/div[1]/div[2]/div/a')

    def inputUsername(self,username):
        """輸入帳號"""
        self.findElement(*self.username_loc).send_keys(username)
        t.sleep(3)

    def inputPassword(self,password):
        """輸入密碼"""
        self.findElement(*self.password_loc).send_keys(password)
        t.sleep(3)

    @property
    def clickLogin(self):
        """點選登入"""
        self.findElement(*self.clickLogin_loc).click()
        t.sleep(3)

    def login(self,username='15730996037',password='521125'):
        self.inputUsername(username=username)
        self.inputPassword(password=password)
        self.clickLogin
        t.sleep(30)

    def getError(self):
        """獲取錯誤資訊"""
        return self.findElement(*self.error_loc).text
        t.sleep(3)

    def clickDuanxin(self):
        """點選短息登入"""
        self.findElement(*self.duanxin_loc).click()
        t.sleep(3)

    def receiveYanzheng(self):
        """點選接受驗證碼"""
        self.findElement(*self.receive_loc).click()
        t.sleep(60)

   物件層的繼承 三代繼承 子繼承父 父繼承祖父

from selenium.webdriver.common.by import By
from base.base import WebUI
from page.weibo import Weibo
import time as t

class WeiboProfile(Weibo):
    profile_loc=(By.XPATH,'//*[@id="skin_cover_s"]/div/a/img')
    concern_loc=(By.XPATH,'//*[@id="Pl_Core_T8CustomTriColumn__3"]/div/div/div/table/tbody/tr/td[1]/a/strong')
    fans_loc=(By.XPATH,'//*[@id="Pl_Core_T8CustomTriColumn__3"]/div/div/div/table/tbody/tr/td[2]/a/strong')
    number_loc=(By.XPATH,'//*[@id="Pl_Core_T8CustomTriColumn__3"]/div/div/div/table/tbody/tr/td[3]/a/strong')
    nick_loc=(By.XPATH,'//*[@id="Pl_Official_Headerv6__1"]/div[1]/div/div[2]/div[2]/h1')
    signature_loc=(By.XPATH,'//*[@id="Pl_Official_Headerv6__1"]/div[1]/div/div[2]/div[3]')

    @property
    def clickProfile(self):
        """點選首頁"""
        self.findElement(*self.profile_loc).click()
        t.sleep(3)

    def homePage(self):
        self.login()
        self.clickProfile

    @property
    def getConcern(self):
        """獲取關注數"""
        return int(self.findElement(*self.concern_loc).text)
        t.sleep(3)

    @property
    def getFans(self):
        """獲取粉絲數"""
        return int(self.findElement(*self.fans_loc).text)
        t.sleep(3)

    @property
    def getNumber(self):
        """獲取微博數"""
        return int(self.findElement(*self.number_loc).text)
        t.sleep(3)

    @property
    def getNick(self):
        """獲取暱稱"""
        return self.findElement(*self.nick_loc).text
        t.sleep(3)


    @property
    def getSig(self):
        """獲取簽名"""
        return self.findElement(*self.signature_loc).text
        t.sleep(3)

  登入之後 點選首頁 進行測試

from page.weiboprofile import WeiboProfile
from page.init import InitWeibo
from utils.jsonutils import readJson
import unittest

class WeiboTest(InitWeibo,WeiboProfile):
    def test_weiboProfile_001(self):
        """校驗關注數"""
        self.homePage()
        self.assertEqual(self.getConcern,276)

    def test_weiboProfile_002(self):
        """校驗粉絲數"""
        self.homePage()
        self.assertEqual(self.getFans,327)

    def test_weiboProfile_003(self):
        """校驗微博數"""
        self.homePage()
        self.assertEqual(self.getNumber,1313)

    def test_weiboProfile_004(self):
        """校驗暱稱"""
        self.homePage()
        self.assertEqual(self.getNick,'吃不胖的瘦子121')

    def test_weiboProfile_005(self):
        """校驗簽名"""
        self.homePage()
        self.assertEqual(self.getSig,'愛玩,單身青年。')