数据库实验——嵌入式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

却报错:

image-20210820112415631

解决:

SQL语句需要严格匹配数据类型,这里是字符串类型,使用字符串格式化时,传入的数据只有字符串,而没有两边的单引号,需要在之前就加入,所以修改为下面的语句:

sql = “SELECT * FROM course WHERE Cname = ‘%s’” % Coursename

运行成功。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐