【Redis的那些事 · 上篇】Redis的
969 2023-04-03 03:33:12
山西财经大学《数据库技术及程序设计(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')
执行前:
执行后:
(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'")”
解决方案:
插入数据已存在,更改即将插入的数据,直至使其满足能插入的条件。
教师评语
成 绩