数据库实验——嵌入式Mysql
题目描述
1. 使用嵌入式SQL对学生-课程数据库中的表完成下述功能:
\1) 查询某一门课程的信息。要查询的课程由用户在程序运行过程中指定,放在主变量中。
\2) 查询选修某一门课程的选课信息,要查询的课程号由用户在程序运行过程中指定放在主变量中,然后根据用户的要求修改其中某些记录的成绩字段。
代码实现
1. 使用嵌入式SQL对学生-课程数据库中的表完成下述功能:
\1. 查询某一门课程的信息。要查询的课程由用户在程序运行过程中指定,放在主变量中。
代码:
# -*- coding: utf-8 -*- """ Created on Sat Apr 10 10:03:58 2021 @author: Yuetian """ import pymysql def select_form(): \# 打开数据库连接 db = pymysql.connect(host='localhost', port=3306, user='root', password ='root', database='studentclass') \# 使用cursor()方法获取操作游标 cursor = db.cursor() Coursename = input('请输入课程名:') \# SQL 查询语句 \# sql = "SELECT * FROM course WHERE Cname = '数据库'" sql = "SELECT * FROM course WHERE Cname = \'%s\'" % Coursename try: \# 执行SQL语句 count = cursor.execute(sql) \# 获取所有记录列表 for i in range(count): print(cursor.fetchone()) except Exception as e: print("查询出错:case%s"%e) finally: \# 关闭游标连接 cursor.close() \# 关闭数据库连接 db.close() if __name__ == '__main__': select_form()
展示:
]
\2. 查询选修某一门课程的选课信息,要查询的课程号由用户在程序运行过程中指定放在主变量中,然后根据用户的要求修改其中某些记录的成绩字段。
代码:
# -*- coding: utf-8 -*- """ Created on Sat Apr 10 10:43:40 2021 @author: Yuetian """ import pymysql def select_change(): \# 打开数据库连接 db = pymysql.connect(host='localhost', port=3306, user='root', password ='root', database='studentclass') \# 使用cursor()方法获取操作游标 cursor = db.cursor() Courseno = input('请输入课程号:') Courseno = int(Courseno) \# SQL 查询语句 \# sql = "SELECT * FROM course WHERE Cname = '数据库'" sql = "SELECT * FROM sc WHERE Cno = %d" % Courseno try: \# 执行SQL语句 count = cursor.execute(sql) \# 获取所有记录列表 for i in range(count): print(cursor.fetchone()) Sid = input('请输入要修改学生的学号(输入0不做修改):') Sid = int(Sid) if(Sid): Grade = input('将成绩修改为:') Grade = int(Grade) try: \# cursor.execute("SELECT * FROM sc WHERE Sno = %d AND Cno = %d" % (Sid,Courseno)) cursor.execute("UPDATE sc SET Grade = %d WHERE Sno = %d AND Cno = %d" % (Grade,Sid,Courseno)) db.commit() print("修改成功!") except Exception as e: print(e) else: pass except Exception as e: print("查询出错:case%s"%e) finally: \# 关闭游标连接 cursor.close() \# 关闭数据库连接 db.close() if __name__ == '__main__': select_change()
展示:
]
问题解决
\1. 在嵌入式sql实验中,虽然执行了:"UPDATE sc SET Grade = %d WHERE Sno = %d AND Cno = %d
语句,但是数据并没有更新。
解决:
发现每次修改数据后,都要使用:db.commit()
来与数据库进行交互,提交请求,才能修改。
\2. 使用sql = “SELECT * FROM course WHERE Cname = %s” % Coursename
却报错:
解决:
SQL语句需要严格匹配数据类型,这里是字符串类型,使用字符串格式化时,传入的数据只有字符串,而没有两边的单引号,需要在之前就加入,所以修改为下面的语句:
sql = “SELECT * FROM course WHERE Cname = ‘%s’” % Coursename
运行成功。