数据库实验——嵌入式Mysql
文章目录
- 数据库实验——嵌入式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
运行成功。