python接入数据库

一、库

pip install pymysql cryptography

使用pymysql库的时候会调用cryptography库,我们不会直接调用cryptography库。

import pymysql

二、步骤(以insert为例)

第一步:创建连接(获得Connection对象)

conn = pymysql.connect(host='localhost', port=3306,
                       user='***', password='******',
                       database='名称', charset='utf8mb4')

第二步:获得游标(获得Cursor对象)

cursor = conn.cursor()

第三步:通过游标对象向数据库发出SQL

affected_rows = cursor.execute(
    'insert into tb_dept (dno, dname, dloc) values (%s, %s, %s)',
    (no, name, location)
)
if affected_rows == 1:
    print('添加成功!')

第四步:提交事务/回滚事务

# 插入成功用:
conn.commit()
# 插入失败用:
conn.rollback()

第五步:关闭连接(释放资源)

conn.close()

三、完整代码

因第四步要判断是否运行成功,然后再决定是用提交事务还是回滚事务,所以整体加异常捕获!

1. 插入数据(insert)

import pymysql
no = int(input('部门编号:'))
name = input('部门名称:')
location = input('部门所在地:')

# 第一步:创建连接(获得Connection对象)
conn = pymysql.connect(host='localhost', port=3306,
                       user='guest', password='Guest.618',
                       database='hrs', charset='utf8mb4')
try:
    # 第二步:获得游标(获得Cursor对象)
    cursor = conn.cursor()
    # 第三步:通过游标对象向数据库发出SQL
    affected_rows = cursor.execute(
        'insert into tb_dept (dno, dname, dloc) 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()

2.更新数据(update)

import pymysql
no = int(input('部门编号:'))
location = input('部门所在地:')

# 第一步:创建连接(获得Connection对象)
conn = pymysql.connect(host='localhost', port=3306,
                       user='guest', password='Guest.618',
                       database='hrs', charset='utf8mb4')
try:
    # 第二步:获得游标(获得Cursor对象)
    cursor = conn.cursor()
    # 第三步:通过游标对象向数据库发出SQL
    affected_rows = cursor.execute(
        'update tb_dept set dloc = %s where dno = %s',
        (location, no)
    )
    if affected_rows == 1:
        print('修改成功!')
    # 第四步:提交事务(成功)
    conn.commit()
except pymysql.MySQLError as err:
    print(err)
    # 第四步:回滚事务(失败)
    conn.rollback()
finally:
    # 第五步:关闭连接(释放资源)
    conn.close()

3.删除数据(delete)

import pymysql
no = int(input('部门编号:'))

# 第一步:创建连接(获得Connection对象)
conn = pymysql.connect(host='localhost', port=3306,
                       user='guest', password='Guest.618',
                       database='hrs', charset='utf8mb4')
try:
    # 第二步:获得游标(获得Cursor对象)
    cursor = conn.cursor()
    # 第三步:通过游标对象向数据库发出SQL
    affected_rows = cursor.execute(
        'delete from tb_dept where dno = (%s)',
        (no, )
    )
    if affected_rows == 1:
        print('删除成功!')
    # 第四步:提交事务(成功)
    conn.commit()
except pymysql.MySQLError as err:
    print(err)
    # 第四步:回滚事务(失败)
    conn.rollback()
finally:
    # 第五步:关闭连接(释放资源)
    conn.close()

4.查询数据(select)

import pymysql

# 第一步:创建连接(获得Connection对象)
conn = pymysql.connect(host='localhost', port=3306,
                       user='guest', password='Guest.618',
                       database='hrs', charset='utf8mb4')
try:
    # 第二步:获得游标(获得Cursor对象)
    cursor = conn.cursor()
    # 第三步:通过游标对象向数据库发出SQL
    cursor.execute(
        'select dno, dname, dloc from tb_dept'
    )
    # 第四步:通过游标对象抓取数据
    # 海象运算符(赋值表达式的值可以直接作为while循环的条件)
    while data := cursor.fetchone():
        print(data)
except pymysql.MySQLError as err:
    print(err)
finally:
    # 第五步:关闭连接(释放资源)
    conn.close()

四、将数据库的二维表导出到Excel文件中

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

# 创建Excel工作簿对象
wb = openpyxl.Workbook()
# 获取默认的工作表
sheet1 = wb.active  # type: Worksheet
# 修改工作表的名字
sheet1.title = '部门表'
# 添加表头
sheet1.append(('部门编号', '部门名称', '部门所在地'))

# 创建新的工作表
sheet2 = wb.create_sheet('员工表')
sheet2.append(('工号', '姓名', '职位', '主管', '月薪', '补贴', '所属部门'))

conn = pymysql.connect(host='localhost', port=3306,
                       user='guest', password='Guest.618',
                       database='hrs', charset='utf8mb4')
try:
    cursor = conn.cursor()
    cursor.execute(
        'select dno, dname, dloc from tb_dept'
    )
    while data := cursor.fetchone():
        sheet1.append(data)

    cursor.execute(
        '''
        select t1.eno
         , t1.ename
         , t1.job
         , t2.ename
         , t1.sal
         , t1.comm
         , t3.dname
      from tb_emp as t1 
           left join tb_emp as t2 on t1.mgr = t2.eno
           left join tb_dept as t3 on t1.dno = t3.dno;
        '''
    )
    while data := cursor.fetchone():
        sheet2.append(data)
except pymysql.MySQLError as err:
    print(err)
finally:
    # 保存工作簿对象
    wb.save('人力资源管理系统.xlsx')
    conn.close()

你可能感兴趣的:(数据库,python,sql)