山西财经大学《数据库技术及程序设计(Python+MySQL)》实验报告

山西财经大学《数据库技术及程序设计(Python+MySQL)》实验报告
MySQL 实验

山西财经大学《数据库技术及程序设计(Python+MySQL)》实验报告

20xx年 xxxx

实验题目

PythonMySQL数据库

学 院

班 级

姓 名

学 号

理论课教师

上机指导教师

实验目的:

(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'")

解决方案:

插入数据已存在,更改即将插入的数据,直至使其满足能插入的条件。

教师评语

成 绩

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部