python接入MySQL

一、python接入MySQL数据库实现insert操作

import pymysql

no = int(input('部门编号:'))
name = input('部门名称:')
location = input('部门所在地:')
# 注意一定不要使用字符串拼接或格式化的方式来动态生成sql语句,如果这么做了,就会导致数据库有sql注射攻击的风险

# 创建连接
conn = pymysql.connect(host='localhost', port=3306,
                       user='guset', password='Guest.618',
                       database='hrs', charset='utf8mb4')
try:
    # 获取游标对象
    cursor = conn.cursor()
    # 通过游标对象向数据库发出sql
    affected_rows = cursor.execute('insert into tb_dept values (%s, %s, %s)',
                                   (no, name, location))
    if affected_rows == 1:
        print('新增部门成功!')
    # 事务提交
    conn.commit()
except pymysql.MySQLError as err:
    print(err)
    # 事务回滚
    conn.rollback()
finally:
    # 关闭连接释放资源
    conn.close()

二、python接入MySQL数据库实现select操作

import pymysql

# 创建连接
conn = pymysql.connect(host='localhost', port=3306,
                       user='guset', password='Guest.618',
                       database='hrs', charset='utf8mb4')
try:
    # 获取游标对象
    cursor = conn.cursor()
    # 通过游标对象向数据库发出sql
    affected_rows = cursor.execute('select dno, dname, dloc from tb_dept')
    # 通过游标对象抓取数据
    while row := cursor.fetchone():
        print(row)
except pymysql.MySQLError as err:
    print(err)
finally:
    # 关闭连接释放资源
    conn.close()

三、数据持久化到MySQL

import pymysql
import requests
from bs4 import BeautifulSoup
from pymysql.connections import Connection


def fetch_page(url):
    """
    抓取页面
    :param url: 网页地址
    :return: 网页的HTML代码
    """
    Headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.34'
    }
    response = requests.get(url=url, headers=Headers)
    return response


def parse_page(response):
    """
    解析页面
    :param response: 网页源码
    :return: 解析到的数据
    """
    soup = BeautifulSoup(response.text, 'html.parser')
    lilist = soup.select('html > body > div#wrapper ol > li')
    fetched_data = []
    for i in lilist:
        # 电影标题
        movieTitle = i.select('li > div.item > div.info > div.hd > a > span.title')
        movieList = [i.text for i in movieTitle]
        movieTitle = ''.join(movieList).replace(' ', ' ')
        # 电影评分
        movieScore = i.select_one('li div.bd > div.star > span.rating_num').text
        # 电影评论人数
        commPeople = i.select_one('li div.bd > div.star > span:nth-child(4)').text[:-3]
        # 中心思想
        middIdea = i.select_one('li div.bd > p.quote > span.inq')
        middIdea = middIdea.text if middIdea != None else ''
        fetched_data.append((movieTitle, movieScore, commPeople, middIdea))
    return fetched_data


def write_to_db(conn: Connection, data):
    """
    将数据写入数据库二维表
    :param conn: 数据库连接对象
    :param data: 保存数据的列表
    """
    try:
        with conn.cursor() as cursor:
            cursor.executemany(
                'insert into tb_movie '
                '   (mov_title, mov_rank, mov_comments_count, mov_gist) '
                'values '
                '   (%s, %s, %s, %s)',
                data
            )
            conn.commit()
    except pymysql.MySQLError as err:
        conn.rollback()
        raise err


def main():
    conn = pymysql.connect(host='localhost', port=3306,
                           user='guset', password='Guest.618',
                           database='hrs', charset='utf8mb4')
    try:
        for page in range(10):
            response = fetch_page(f'https://movie.douban.com/top250?start={page * 25}')
            data = parse_page(response)
            write_to_db(conn, data)
    finally:
        conn.close()


if __name__ == '__main__':
    main()

四、将二维表的数据导出到excel文件

import openpyxl
import pymysql
from openpyxl.worksheet.worksheet import Worksheet

# 创建excel工作簿
wb = openpyxl.Workbook()
# 获取默认的工作表
sheet = wb.active # type:Worksheet
# 修改工作表的名字
sheet.title = '员工信息表'
# 添加表头
sheet.append(('编号', '姓名', '职位', '月薪', '部门', '部门所在地'))

# 创建连接
conn = pymysql.connect(host='localhost', port=3306,
                       user='guset', password='Guest.618',
                       database='hrs', charset='utf8mb4')
try:
    # 获取游标对象
    with conn.cursor() as cursor:
        # 通过游标对象向数据库发出sql
        cursor.execute('select eno, ename, job, sal, dname, dloc from tb_emp natural join tb_dept')
        # 通过游标对象抓取数据
        while row := cursor.fetchone():
            print(row)
            # 将元组直接作为行写入excel工作表
            sheet.append(row)
except pymysql.MySQLError as err:
    print(err)
finally:
    # 关闭连接释放资源
    conn.close()
    # 保存工作簿
    wb.save('人力资源管理.xlsx')

五、从excel工作表读取数据写入数据库二维表中

import openpyxl
import pymysql
from openpyxl.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheet

conn = pymysql.connect(host='localhost', port=3306,
                           user='guset', password='Guest.618',
                           database='hrs', charset='utf8mb4')

# 读文件加载工作簿对象
wb = openpyxl.load_workbook('人力资源管理.xlsx')  # type:Workbook
sheet = wb['员工信息表']  # type:Worksheet
# 注意:openpyxl操作行和列的时候索引从1开始
for i in range(2, sheet.max_row + 1):
    data = []
    for j in range(1, sheet.max_column + 1):
        # 通过行和列获取对应的单元格
        cell = sheet.cell(i, j)
        data.append(cell.value)
    print(data)
    try:
        with conn.cursor() as cursor:
            cursor.execute(
                'insert into tb_emp_dept '
                '   (eno, ename, job, sal, dname, dloc) '
                'values '
                '   (%s, %s, %s, %s, %s, %s)',
                data
            )
            conn.commit()
    except pymysql.MySQLError as err:
        conn.rollback()
        raise err

六、作业

1.建表语句

create table tb_sales
(
    order_id int not null auto_increment,
    date date not null,
    city varchar(5) not null,
    channl varchar(5) not null,
    sal_order varchar(255) not null,
    brand varchar(10) not null,
    price int not null,
    quantity int not null,
    primary key (order_id)
);

2.python代码

import openpyxl
import pymysql
from openpyxl.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheet

conn = pymysql.connect(host='localhost', port=3306,
                           user='guset', password='Guest.618',
                           database='hrs', charset='utf8mb4')

# 读文件加载工作簿对象
wb = openpyxl.load_workbook('2020年销售数据.xlsx')  # type:Workbook
sheet = wb['data']  # type:Worksheet
# 注意:openpyxl操作行和列的时候索引从1开始
for i in range(2, sheet.max_row + 1):
    data = []
    for j in range(1, sheet.max_column + 1):
        # 通过行和列获取对应的单元格
        cell = sheet.cell(i, j)
        data.append(cell.value)
    print(data)
    try:
        with conn.cursor() as cursor:
            cursor.execute(
                'insert into tb_sales '
                '   (date, city, channl, sal_order, brand, price, quantity) '
                'values '
                '   (%s, %s, %s, %s, %s, %s, %s)',
                data
            )
            conn.commit()
    except pymysql.MySQLError as err:
        conn.rollback()
        raise err
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老树盘根_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值