准备数据库
- 安装 mariadb-server
- 启动服务
- 创建名为haha 的数据库【utf8】
[root@localhost ~]# yum -y install gcc
[root@localhost ~]# yum -y install mariadb-server
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# systemctl enable mariadb
[root@localhost ~]# ss -ntulp | grep mysql
[root@localhost ~]# mysql
# 创建数据库 haha
# none:表示当前在哪个数据库操作
MariaDB [(none)]> CREATE DATABASE haha CHARSET utf8;
PyMySQL 模块应用
连接数据库
创建连接是访问数据库的第一步
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
db='haha',
charset='utf8'
)
游标
- 游标(cursor)就是游动的标识
- 通俗的说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行
cur = conn.cursor() # 创建游标【对数据库进行增删改查】
创建表
# 建立部门表,员工表,工资表
# 定义创建departments【部门表】sql命令
create_dep = '''CREATE TABLE departments(
dep_id INT, dep_name VARCHAR(50)
)'''
cur.execute(create_dep) # 执行sql语句create_dep
插入数据
对数据库表做修改操作,必须要 commit
#向部门表中插入数据
insert_dep = 'INSERT INTO departments VALUES (%s, %s)' # 定义插入数据的变量,%s为占位符
cur.execute(insert_dep, (1, '人事部')) # 执行sql语句insert_dep, 插入一条记录
cur.executemany( # executemany(), 执行sql语句insert_dep, 同时插入多条记录
insert_dep,
[(2, '运维部'), (3, '开发部'), (4, '测试部'), (5, '财务部'), (6, '市场部')]
)
conn.commit()
查询数据
可以取出表中一条、多条或全部记录
sql4 = "SELECT * FROM departments"
cur.execute(sql4)
result = cur.fetchone()
print(result)
result2 = cur.fetchmany(2)
print(result2)
result3 = cur.fetchall()
print(result3)
修改数据
通过 update 修改某一字段的值
# 更新部门表【departments】中的数据
update_dep = 'UPDATE departments SET dep_name=%s WHERE dep_name=%s'
cur.execute(update_dep, ('人力资源部', '人事部'))
conn.commit()
删除记录
通过 delete 删除记录
#删除部门表【departments】中的id为6的数据
del_dep = 'DELETE FROM departments WHERE dep_id=%s'
cur.execute(del_dep, (6,))
conn.commit()
练习 :员工表 (EMPLOYEE) 相关操作
需求:
- 员工表有 FIRST_NAME VARCHAR(20),LAST_NAME VARCHAR(20),AGE INT,SEX VARCHAR(1),INCOME FLOAT字段
- 使用 PyMySQL 创建该表
- 使用 PyMySQL 添加以下三条数据
- ‘Mac’, ‘A’, 20, ‘M’, 20000
- ‘Tom’, ‘B’, 20, ‘F’, 30000
- ‘Bob’, ‘C’, 20, ‘M’, 40000
- 使用 PyMySQL 查询所有用户信息,并打印结果
- 将 FIRST_NAME 为 Mac 的用户工资改成 10000
- 删除 FIRST_NAME 为 Tom 的用户信息
import pymysql
# 打开数据库连接
db = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
db='haha',
charset='utf8'
)
# 使用 cursor() 方法创建一个游标对象 cursor
cur = db.cursor()
##########################################################
# 创建表
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME VARCHAR(20) NOT NULL,
LAST_NAME VARCHAR(20),
AGE INT,
SEX VARCHAR(1),
INCOME FLOAT
)"""
cur.execute(sql)
##########################################################
# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES (%s, %s, %s, %s, %s)"""
cur.executemany( # executemany(), 执行sql语句, 同时插入多条记录
sql, [
('Mac', 'A', 20, 'M', 20000),
('Tom', 'B', 20, 'F', 30000),
('Bob', 'C', 20, 'M', 40000)
]
)
db.commit()
##########################################################
sql = "SELECT * FROM EMPLOYEE"
cur.execute(sql)
result = cur.fetchone()
print(result)
result2 = cur.fetchmany(2)
print(result2)
##########################################################
sql = 'UPDATE EMPLOYEE SET INCOME=%s WHERE FIRST_NAME=%s'
cur.execute(sql, (10000, 'Mac'))
db.commit()
##########################################################
sql = 'DELETE FROM EMPLOYEE WHERE FIRST_NAME=%s'
cur.execute(sql, ("Tom",))
db.commit()
# 关闭数据库连接
cur.close()
db.close()