python与MySQL数据库的交互--学习笔记


前言

实现python连接数据库并完成存储、查找、删除数据等操作。


一、用python存储数据到数据库

代码如下:

# 先预设变量
company = '阿里巴巴'
title = '测试标题'
href = '测试链接'
source = '测试来源'
date = '测试日期'

# 连接数据库
import pymysql
db = pymysql.connect(host='localhost',
                     port= 3306,
                     user='root',
                     password='A9801051626com',
                     database='mytestdb',
                     charset='utf8')

# 获取游标(用来操作数据库,执行sql语句)
cur = db.cursor()

# 执行sql语句
sql = "insert into mytestdb.pachong values (%s,%s,%s,%s,%s)"
cur.execute(sql,(company,title,href,date,source)) # 执行语句、
db.commit() # 将写操作提交(只有写需要)可以多次操作一起递交,也可执行一点操作一点
            # 没有commit数据库是不会改变的
# 关闭数据库
cur.close()
db.close()

二、用python在数据库中查找并提取数据

代码如下:

# 先预设变量
company = '阿里巴巴'

# 连接数据库
import pymysql
db = pymysql.connect(host='localhost',
                     port= 3306,
                     user='root',
                     password='A9801051626com',
                     database='mytestdb',
                     charset='utf8')

# 获取游标(用来操作数据库,执行sql语句)
cur = db.cursor()

# 执行sql语句
sql = "select * from mytestdb.pachong where company = %s"
cur.execute(sql,company) # 执行语句、
data = cur.fetchall() #提取所有数据,并赋值给变量data
print(data)
db.commit() # 将写操作提交(只有写需要)可以多次操作一起递交,也可执行一点操作一点
            # 没有commit数据库是不会改变的
# 关闭数据库
cur.close()
db.close()

# 处理元祖--提取到每条新闻的标题
for i in range(len(data)):
    print(data[i][1])

结果如下:
((‘阿里巴巴’, ‘标题1’, ‘链接1’, ‘日期1’, ‘来源1’), (‘阿里巴巴’, ‘测试标题’, ‘测试链接’, ‘测试日期’, ‘测试来源’))
标题1
测试标题

三、用python从数据库中删除数据

代码如下(示例):

# 先预设变量
company = '阿里巴巴'

# 连接数据库
import pymysql
db = pymysql.connect(host='localhost',
                     port= 3306,
                     user='root',
                     password='A9801051626com',
                     database='mytestdb',
                     charset='utf8')

# 获取游标(用来操作数据库,执行sql语句)
cur = db.cursor()

# 执行sql语句
sql = "delete from mytestdb.pachong where company = %s"
cur.execute(sql,company) # 执行语句、
data = cur.fetchall() #提取所有数据,并赋值给变量data
db.commit() # 将写操作提交(只有写需要)可以多次操作一起递交,也可执行一点操作一点
            # 没有commit数据库是不会改变的
# 关闭数据库
cur.close()
db.close()

四、案例实战:将金融数据存入数据库

将数据挖掘爬取到的数据存入数据库

忘记去标题中的其他符号

#批量获取多家公司多页的新浪财经新闻并清洗数据---这里公司名称不能直接用中文
from urllib import request,parse
import requests
import random
import time
import re
# 连接数据库
import pymysql

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'}

def Sina(company):
    url = 'https://search.sina.com.cn/?q={}&c=news&from=channel'
    url = url.format(parse.quote(company))
    res = requests.get(url, headers=headers, timeout=10).text
    # print(res)

    # 编写正则表达式提取数据
    p_title = '<h2><a href=.*?target=".*?">(.*?)</a>'
    title = re.compile(p_title, re.S).findall(res)
    p_href = '<h2><a href="(.*?)">'
    href = re.compile(p_href, re.S).findall(res)
    p_date = '<h2><a href=.*?<span class="fgray_time">.*?\s(.*?)</span></h2>'
    date = re.compile(p_date, re.S).findall(res)
    p_source = '<h2><a href=.*?<span class="fgray_time">(.*?)\s.*?</span></h2>'
    source = re.compile(p_source, re.S).findall(res)

    #print(title,href,date)

    # 数据清洗及打印输出
    for i in range(len(title)):
        title[i] = re.sub('<.*?>', '', title[i])
        title[i] = re.sub('&.*?;', '', title[i])
        date[i] = re.sub('<.*?>', '', date[i])
        source[i] = re.sub('<.*?>', '', source[i])
        db = pymysql.connect(host='localhost',
                             port=3306,
                             user='root',
                             password='A9801051626com',
                             database='mytestdb',
                             charset='utf8')

        # 获取游标(用来操作数据库,执行sql语句)
        cur = db.cursor()

        # 执行sql语句
        sql = "insert into mytestdb.pachong values (%s,%s,%s,%s,%s)"
        cur.execute(sql, (company, title[i], href[i], date[i], source[i]))  # 执行语句、
        db.commit()  # 将写操作提交(只有写需要)可以多次操作一起递交,也可执行一点操作一点
        # 没有commit数据库是不会改变的
        # 关闭数据库
        cur.close()
        db.close()

companys = ['华能信托','阿里巴巴','百度集团','万科集团','腾讯','京东']
for i in companys:
        try:
        Sina(i)
        # 每爬取1个页面随机休眠1-3秒
        time.sleep(random.randint(1, 3))
        print(i + '爬取并存入数据库成功')
    except:
        print(i + '爬取并存入数据库失败')

更新的代码将原来的乱码


总结

以上就是将mysql与python结合的第一次尝试,会更深入学习的!这部分学完要开始机器学习啦。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值