核心任务

操作mysql(图形界面) 建库建表

熟悉:CURD语句

python操作Mysql [重点]

任务: 学生管理系统:数据存储在数据!

怎么用python创建一个课程表_mysql


连接Mysql建库建表连接服务器中mysql!

信息: IP: 39.98.39.173 用户名: root 密码: root

1.图形界面工具:navicat

怎么用python创建一个课程表_怎么用python创建一个课程表_02

2.建库

怎么用python创建一个课程表_怎么用python创建一个课程表_03

3.建表

分析

学生表students

学生对象包含属性(id,姓名,性别,年龄,生日,手机号,地址…) #根据业务需求随意扩展!

对应列!

列名 类型 要求

id int整数 主键(primary key) 自增

name varchar(20) 字符串 必须写字符串大小,不为空!

sex char(2) 性别是固定的字符用char(2)

age int整数

phone varchar(11) 字符串 176***0805

birthday datetime 时间

addr varchar(50)字符串

怎么用python创建一个课程表_怎么用python创建一个课程表_04


Python操作数据库注意:python或任何编程语言php.java…net等,不能直接连接数据库!

需要安装对应的数据库驱动(第三方模块) [比如: 不同品牌手机连接到电脑,需要安装驱动包,才传输数据]

连接不同数据库,需要下载不同的驱动包!

怎么用python创建一个课程表_表名_05


python操作数据库流程
下载mysql驱动模块(pymysql)

引入模块

建连接(建立和数据库连接)

执行sql语句

非查询:增加,删,修改

查询:select

处理结果

释放资源

关连接

关游标!

驱动介绍python操作mysql驱动/第三方模块: MySQLdb PyMysql
pymysql: 支持2.x 支持3.x

mysqldb: 只支持3.x

安装模块

pip install pymysql

增删改

SQL增加
insert into 表名(列1,列2,....) values(值1,值2,...)
删除
delete from 表名 ; # 删除表中所有数据!

delete from 表名 where 条件

;

修改

update 表名 set 列1=值1,列2=值2,....; #不加条件,修改所有列!~ update 表名 set 列1=值1,列2=值2,....where 条件;
select * from students where sex ='男';
insert into students(name,sex,age,birthday,phone,addr)
values('刘帅','女',20,now(),'17600950805','山西') ;
update students set sex='男' where name ='刘帅'
delete from students where name ='刘晒'

怎么用python创建一个课程表_mysql_06


python实现非查询

非查询:步骤一样的!

区别: sql语句不同, 参数个数不同!

def my_execute(sql,params):

'''非查询通用功能! sql语句, 参数列表'''

# 2.连接

conn = pymysql.connect(host='39.98.39.173',port=13306,user='root',passwd='root',db='1909C2',c harset='utf8')

print(conn)

# 3. 获取游标

cur = conn.cursor()

# 4. 执行

sql num = cur.execute(sql,params)

#print(f'影响行数:{num}')

conn.commit() # 必须手动提交到数据库!

# 5. 释放资源

cur.close()

conn.close()

# 返回影响行数!

return num

if name == 'main':

通用

sql ='insert into students(name,sex,age,birthday,phone,addr) values(%s,%s,%s,%s,%s,%s)' 
params=('王五','女',39,'2020-11-03','17600950805','山西') 
if my_execute(sql,params)>0: 
	print('数据库操作成功!') 
else:
	print('数据库操作失败!')
参数如何传递
sql ='insert into students(name,sex,age,birthday,phone,addr)

values(%s,%s,%s,%s,%s,%s)'格式:一行数据就是一个元组!
params=('王五','女',39,'2020-11-03','17600950805','山西')

num = cur.execute(sql,params)批量执行非查询
sql ='insert into students(name,sex,age,birthday,phone,addr)

values(%s,%s,%s,%s,%s,%s)'格式:一行数据就是一个元组!
params=[('王五1','女',39,'2020-11-03','17600950805','山西'),('王五2','女',39,'2020-11- 03','17600950805','山西')]

num = cur.executemany(sql,params) # 结果大于1的核心对象
连接对象: conn= pymysql.connect(host=‘IP地址’,port=13306,user=‘用户名’,passwd=‘密 码’,db=‘数据库名’,charset='utf)

conn.close() #关闭

cur= conn.cursor() 创建游标

游标 Cursor 操作数据库依靠游标

num = cur.execute(sql,参数) 执行非查询,返回影响的行数!

num=cur.executemangy(sql,[(),(),…]) 批量执行非查询,返回影响行数!

cur.close()

cur.fetchone() 抓取1条,返回元组或None

cur.fetchall() 抓取所有

cur.fetchmany(大小) 指定抓取大小

cur.next() 游标下移

查询

import pymysql

def get_one():

# 1. 连接

conn = pymysql.connect(host='39.98.39.173', port=13306, user='root', passwd='root', db='1909C2', charset='utf8')

# 2. 打开游标

cur = conn.cursor()

# 3. 执行

sql ='select * from students where sex = %s'

cur.execute(sql,('女'))

#result = cur.fetchone() # 返回一个元组() 默认找第1个!

result = cur.fetchall() # 返回多个元祖 ((),(),(),...)

print(result)

for stu in result:

print(f'id:{stu[0]},名字:{stu[1]}')

# 4.关闭资源

cur.close()

conn.close()

if name == 'main':

get_one()