第九天
核心任务:
操作mysql(图形界面)
建库建表
熟悉:curd语句
python操作mysql[重点]
任务:学生管理系统:数据存储在数据
连接MySQL建库建表
连接服务器中MySQL
信息:ip:39.98.39.173 用户名:root 密码:root
1.图形界面工具:navicat
2.建库
3.建表
分析
学生表students
学生对象包含属性(id,姓名,性别,年龄,生日,手机号,地址。。)根据业务需求随意扩展
对应列
列名
类型
要求
id
int整数
主键(primary key)自增
name
varchar(20)字符串
必须写字符串大小,不为空!
sex
enum(男,女)
性别是固定的字符用char(2)
age
int整数
phone
varchar(11)字符串
176****0805
birthday
datetime时间
addr
varchar(50)字符串
python操作数据库
注意:python或任何编程语言php。java。。net等,不能直接连接数据库!
需要数据库驱动(第三方模块)[比如:不同品牌手机连接到电脑,需要安装驱动包,才能传输数据]
连接不同数据库,需要下载不同的驱动包!
python操作数据库流程
下载mysql驱动模块(pymysql)
引入模块
建连接(建立和数据库连接)
执行sql语句
非查询:增加,删,修改
查询:select
处理结果
释放资源
关连接
关游标!
驱动介绍
python操作mysql驱动/第三方模块: MySQLdb PyMysql
pymysql: 支持2.x 支持3.x
mysqldb: 只支持3.x
1 #安装模块
2 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 ='刘帅'deletefrom students where name ='刘晒'
python实现非查询
非查询:步骤一样的
区别:sql语句不同,参数个数不同!
defmy_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()#返回影响行数!
returnnumif __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() 游标下移
查询
importpymysqldefget_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 inresult:print(f'id:{stu[0]},名字:{stu[1]}')#4.关闭资源
cur.close()
conn.close()if __name__ == '__main__':
get_one()
任务:
增加
删改
查所有
根据名字查