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

展示:


MySQL内嵌式版本 mysql 嵌入式_python

]

\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()

展示:

MySQL内嵌式版本 mysql 嵌入式_python_02

]

问题解决

\1. 在嵌入式sql实验中,虽然执行了:"UPDATE sc SET Grade = %d WHERE Sno = %d AND Cno = %d

语句,但是数据并没有更新。

解决:

发现每次修改数据后,都要使用:db.commit()

来与数据库进行交互,提交请求,才能修改。

\2. 使用sql = “SELECT * FROM course WHERE Cname = %s” % Coursename

却报错:


MySQL内嵌式版本 mysql 嵌入式_数据库_03

解决:

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

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

运行成功。