山西财经大学《数据库技术及程序设计(Python+MySQL)》实验报告MySQL 实验@font-face { font-family: "Times New Roman" }\3cp>@font-face { }\3c/p>\3cp>@font-face { }\3c/p>\3cp>@font-face { }\3c/p>\3cp>@font-face { }\3c/p>\3cp>@list l0:level1 { }\3c/p>\3cp>p.MsoNormal { }\3c/p>\3cp>span.10 { }\3c/p>\3cp>span.15 { }\3c/p>\3cp>span.16 { }\3c/p>\3cp>p.MsoHeader { }\3c/p>\3cp>p.MsoFooter { }\3c/p>\3cp>p.pre { }\3c/p>\3cp>span.msoIns { }\3c/p>\3cp>span.msoDel { }\3c/p>\3cp>table.MsoNormalTable { }\3c/p>\3cp>table.MsoTableGrid { }\3cbr>@page { mso-page-border-surround-header: no }@page Section0 { }\3cbr>div.Section0 { page: Section0 }山西财经大学《数据库技术及程序设计(Python+MySQL)》实验报告
20xx年 xx月 xx日
实验题目
Python与MySQL数据库
学 院
班 级
姓 名
学 号
理论课教师
上机指导教师
实验目的:
(1)掌握Python连接数据库的方法 , 掌握python使用MySQL应用数据库的方法 。
(2)熟悉MySQL(使用Front或Workbench等)可视化工具创建使用数据库的方法 。
(3)熟练掌握SQL语言操作数据库的方法 。能够通过SQL语言创建数据库和表、对数据表进行增删改查操作 , 创建表间的关系、进行级联更新等操作 。
(4)能够通过python访问MySQL数据库 , 并进行数据库的相关操作 。
实验要求:
(1)自行设想一个应用场景 , 设计一个数据库 , 该数据库中设计两个以上有关联的表 。
(2)MySQL(可使用使用Front或Workbench等可视化工具)创建该数据库 , 并建立其中一个表 。
(3)使用python编程访问建立好的MySQL数据库 , 并完成下述操作:
①建立表结构;
②给各个表中添加记录数据;
③给其中一个表中插入一个字段;
④更新一个表中满足条件的记录;
⑤查找一个表中满足某个条件的记录;
⑥删除某个表中的满足某个条件的记录;
⑦建立两个表之间的关系(注意主键和外键的设置);
⑧更新建立关系的两个表中主表的记录 , 要求子表对应的记录相应更新;
⑨删除建立关系的两个表中的子表 。
操作步骤(可附主要代码):
1. 创建数据库

文章插图
2. 创建数据表

文章插图

文章插图
3. 注:本次实验使用pycharm+jupyter+anaconda环境,所用到的库为pymysql,数据库为本地创建数据库 。
import pymysql
mysql_conn = pymysql.connect(host= '127.0.0.1',
port= 3306,
user= 'lingqin',
password= '*****',
db= 'xscj')
def display(table_name):
sql="select * from "+table_name
myCursor.execute(sql)
myresult = myCursor.fetchall()
for x in myresult:
print(x)
(1)
#建立表结构
myCursor = mysql_conn.cursor()
myCursor.execute("create table xs_kc (sno char(6),cno char(5), grade int)")
myCursor.execute("create table kc (cno char(6),cname varchar(20), Ctime tinyint,Ccredit int)")
sql="ALTER TABLE kc add constraint PK_cno primary key (cno)"
myCursor.execute(sql)
sql="ALTER TABLE xs_kc add constraint PK_sno_cno primary key(sno,cno)"
myCursor.execute(sql)
myCursor.execute("SHOW TABLES")
for x in myCursor:
print(x)

文章插图
(2)#给各个表中添加记录数据;
mycursor = mysql_conn.cursor()
sql="insert into xs(sno,sname,ssex,sbirth,sdept)values(%s,%s,%s,%s,%s)"
val=[
('95001','李勇','男','20','CS'),
('95002','刘晨','女','19','IS'),
('95003','王敏','女','18','MA'),
('95004','张立','男','19','IS'),
('95005','刘云','女','18','CS')
]
myCursor.executemany(sql, val)
mysql_conn.commit()
sql="insert into kc(cno,cname,Ctime,Ccredit)values(%s,%s,%s,%s)"
val=[
("1","数据库",4,5),
("2","数学",6,7),
("3","信息系统",3,1),
("4","操作系统",4,6),
("5","数据结构",4,7),
("6","数据处理",3,4),
("7","PASCAL语言",4,6)
]
myCursor.executemany(sql, val)
mysql_conn.commit()
sql="insert into xs_kc(sno,cno,grade)values(%s,%s,%s)"
val=[
('95001','1',92),
('95001','2',85),
('95001','3',88),
('95002','2',90),
('95002','3',80),
('95003','2',85),
('95004','1',58),
('95004','2',85)
]
myCursor.executemany(sql, val)
mysql_conn.commit()
display("xs")
display("kc")
display("xs_kc")

文章插图
(3)
sql="insert into xs_kc(sno,cno,grade)value(%s,%s,%s)"
val=('95004','3','88')
myCursor.execute(sql, val)
mysql_conn.commit()
display("xs_kc")
执行前:

文章插图
执行后:

文章插图
(4)
mycursor = mysql_conn.cursor()
sql = "UPDATE xs SET sname = '刘自立' WHERE sno = '95004'"
mycursor.execute(sql)
mysql_conn.commit()
display("xs")
执行前:

文章插图
执行后:

文章插图
(5)
sql="select * from xs where sno='95004'"
myCursor.execute(sql)
myresult=myCursor.fetchall()
for x in myresult:
print(x)

文章插图
(6)
sql="delete from kc where cno='7'"
myCursor.execute(sql)
display('kc')
执行前:

文章插图
执行后:

文章插图
【山西财经大学考研分数线 Python+MySQL 山西财经大学《数据库技术及程序设计》实验报告】(7)
sql=' alter table xs_kc add index(cno)'
myCursor.execute(sql)
sql=' alter table xs_kc add index(sno)'
myCursor.execute(sql)
sql=' alter table xs_kc add constraint xsKc_kc1 foreign key(cno) references kc(cno)ON DELETE CASCADE ON UPDATE CASCADE'
myCursor.execute(sql)
sql=' alter table xs_kc add constraint xsKc_kc2 foreign key(sno) references xs(sno)ON DELETE CASCADE ON UPDATE CASCADE'
myCursor.execute(sql)

文章插图
(由于mysql workbenth长时间无刷新无法展示外键关系 , 我采用pycharm自带工具展示执行结果)
(8)
myCursor = mysql_conn.cursor()
sql = "UPDATE xs SET sno = '95010' WHERE sname = '刘自立'"
myCursor.execute(sql)
mysql_conn.commit()
display("xs")
display("xs_kc")
执行前

文章插图
执行后

文章插图
(9)
sql = "DROP TABLE IF EXISTS xs_kc"
myCursor.execute(sql)
try:
display("xs_kc")
except :
print('xs_kc已删除')

文章插图
实验中发现的问题及解决方法:
1.插入数据时遇到“TypeError: not enough arguments for format string”

文章插图
解决方案:
使用myCursor.execute(sql, val)替换myCursor.executemany(sql, val)
2.插入数据时发生“IntegrityError: (1062, "Duplicate entry '95001-3' for key 'xs_kc.PRIMARY'")”
解决方案:
插入数据已存在 , 更改即将插入的数据 , 直至使其满足能插入的条件 。
教师评语
成 绩
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
