python无法解析mysql数据表,如何解决?

利用python和mysql实现学生管理系统,程序报多处错误和警告,但是能够正常运行,刚开始学习python,希望大家能够予以指点
具体问题为:
1、无法解析表、列
2、没有配置任何数据源来运行此 SQL 并提供高级代码辅助。 通过问题菜单(Alt+Enter)禁用此检查。
3、详细见图
此处为详细代码

import pymysql

conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='lkmpython',
    database='test',
    charset='utf8'
)
class Student:
    def __init__(self,id,name,socre):
        self.id = id
        self.name = name
        self.socre = socre

    #添加
    def add_info(id,anme,socre):
        mycursor = conn.cursor()
        sql = 'insert into student values(%s,%s,%s);'
        value = (id,name,socre)
        mycursor.execute(sql,value)
        conn.commit()
        print(mycursor.rowcount,'信息创建成功!\n')
        print('^-^********************只是一条分割线罢了********************^-^\n')
    #删除
    def del_info(id):
        mycursor = conn.cursor()
        sql = 'delete from student where id = %s;'
        value = (id)
        mycursor.execute(sql, value)
        conn.commit()
        print(mycursor.rowcount, '信息删除成功!\n')
        print('^-^********************只是一条分割线罢了********************^-^\n')
    #修改
    def change_info(name,socre,id):
        mycursor = conn.cursor()
        sql = 'update student set name = %s,socre = %s where id = %s;'
        value = (name,socre,id)
        mycursor.execute(sql, value)
        conn.commit()
        print(mycursor.rowcount, '信息修改成功!\n')
        print('^-^********************只是一条分割线罢了********************^-^\n')
    #查询
    def query_socre(id):
        mycursor = conn.cursor()
        sql = 'select * from student where id = %s;'
        value = (id,)
        mycursor.execute(sql, value)
        result = mycursor.fetchone()
        if result:
            info = Student(result[0], result[1], result[2])
            print(f'学号:{info.id},姓名:{info.name},成绩:{info.socre}')
        else:
            print('未查到该学生信息!')
        print(mycursor.rowcount, '信息查询结束!\n')
        print('^-^********************只是一条分割线罢了********************^-^\n')
    #验证
    def authenticate(username,password):
        if username == 'admin' and password == 'admin123':
            return True
        else:
            return False


while True:
    print('欢迎使用饭兜大学学生管理系统'.center(60))
    username = input('请输入用户名:')
    password = input('请输入密码:')
    if Student.authenticate(username,password):
        print('登陆成功!\n')
        break
    else:
        print('用户名或密码错误!请重新登录!')
        continue
while True:
    print('饭兜大学')
    print('1.创建学生信息'.center(60))
    print('2.删除学生信息'.center(60))
    print('3.修改学生信息'.center(60))
    print('4.查询学生成绩'.center(60))
    print('5.退出系统'.center(58))
    choice= int(input('请选择操作编码:'))
    if choice == 1:
        id = int(input('请输入学号:'))
        name = input('请输入姓名:')
        socre = input('请输入成绩:')
        Student.add_info(id,name,socre)
    elif choice == 2:
        id = int(input('请输入学号:'))
        Student.del_info(id)
    elif choice == 3:
        id = int(input('请输入学号:'))
        name = input('请输入姓名:')
        socre = int(input('请输入成绩:'))
        Student.change_info(name,socre,id)
    elif choice == 4:
        id = int(input('请输入学号:'))
        Student.query_socre(id)
    elif choice == 5:
        print('退出登录!')
        break
    else:
        print('请输入正确的编码!\n')
        continue

此处为报错信息

img

img

img

img

我复现了一下。确实有点小问题。
但是控制台不报错。。报错的话你截控制台的报错好一点
,其他提示更多说的是 哪些地方不规范或者哪个参数定义了没有使用
不影响程序主体使用。


首先是变量名称: name:名字/姓名,score:分数。
代码中存在 anme,sorce。。?
所以数据库里面也是 sorce? 23333 赶紧改过来,见名知意呀哈哈哈。

其次是模块化思想,
你的整体程序可不能开头构建一个数据库连接,中间定义一个类。
主体程序是两个while true循环,结束还不关闭数据库连接。
那应该怎么改?朝着最简单最简洁的方向去改,比如:
一个类里面包含构建数据库连接及所有操作方法。
一个包含new上面类的对象,登录,判断编号,调用对象方法的函数。
一个主程序调用上面的函数。
这样的话更容易理解和定位问题。


最后,共勉^_^.

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7735910
  • 这篇博客你也可以参考下:跟我学python之mysql操作详解 二、增删改操作
  • 除此之外, 这篇博客: 〖Python 数据库开发实战 - MySQL篇②〗- 一文通解关系型数据库与非关系型数据库中的 🐬 什么是非关系型数据库 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 什么是非关系型数据库呢?也不用去查百度,查了也看不懂。所以还是得一针见血直插要害的讲明白 NoSQL 数据库的概念。

    NoSQL 数据库也是把数据分类存储到不同的数据文件里面, 但是数据之间是没有关联关系的,这是因为 NoSQL 数据库根本就没有提供 SQL语言 从多个数据库问价提取关键数据。

    既然如此,那为什么还要使用 NoSQL 数据库呢?其实 NoSQL 数据库是关系型数据库的一种补充,与关系型数据库之间不是竞争的关系,而是互补的关系。

    比如说 “秒杀” 这个场景,价值200元的东西,秒杀只需要10元,但是库存只有100件。于是大家就疯狂的抢购,秒杀有个严重的问题就是超卖。造成超卖的问题的原因是,数据库是多线程的消费者你买我也买的请求在数据库就变成了多个线程争抢读取库存、修改库存。所以多线程的条件下就容易出现超卖,所以秒杀这个业务对于关系型数据库就很难处理。

    这个时候就可以引入 NoSQL 数据库,有一种 NoSQL 数据库 叫做 Redis ,这是一款单线程的非关系型数据库,所以使用 Redis 就不会出现 超卖的情况。这是不是就是对关系型数据库的一种补充呢?

    还有一个问题就是,关系型数据库在存储数据之前需要先建表,定义字段的类型、约束的条件,哪些字段不能为空值,哪些字段不能有重复的值等等。所以在告诉写入的时候,这样的校验就会让速度明显的降低。如果保存的是海量的低价值的数据,这就是对数据库的极大浪费(比如说朋友圈的信息相较于银行转账记录的信息就是低价值的数据),低价值的数据没有必要保存到 MysQL 这样的关系型数据库里面,保存在 NoSQL 数据库里面就是最适合的了。

    因此 NoSQL 数据库没有严格的表结构,数据的读写也没有那么多的校验,读写速度也远远超过了关系型数据库。像是用户登录的信息啊、网站的通知消息等等,保存到 NoSQL 数据库里是最适合的了。

  • 您还可以看一下 黄锦煌老师的Python操作mysql数据库入口基础和实战案例课程中的 为什么要用数据库小节, 巩固相关知识点